KasperskyOS Community Edition 1.1
[Topic libkos_threads]

KosThreadCallback()

Прототип callback-функции объявлен в файле kos/thread.h.

typedef void KosThreadCallback(KosThreadCallbackReason reason);

/* Аргумент callback-функции */

typedef enum KosThreadCallbackReason {

KosThreadCallbackReasonCreate,

KosThreadCallbackReasonDestroy,

} KosThreadCallbackReason;

При создании нового потока все зарегистрированные callback-функции будут вызваны с аргументом KosThreadCallbackReasonCreate, при завершении – с аргументом KosThreadCallbackReasonDestroy.

В начало
[Topic kos_thread_callback]

KosThreadCallbackRegister()

Функция объявлена в файле kos/thread.h.

Retcode KosThreadCallbackRegister(KosThreadCallback *callback);

Функция регистрирует пользовательскую callback-функцию. При создании и завершении потока будут вызваны все зарегистрированные callback-функции.

В начало
[Topic kos_thread_callback_register]

KosThreadCallbackUnregister()

Функция объявлена в файле kos/thread.h.

Retcode KosThreadCallbackUnregister(KosThreadCallback *callback);

Функция дерегистрирует (удаляет из списка вызываемых) пользовательскую callback-функцию.

В начало
[Topic kos_thread_callback_unregister]

KosThreadCreate()

Функция объявлена в файле kos/thread.h.

Retcode KosThreadCreate(Tid *tid,

rtl_uint32_t priority,

rtl_uint32_t stackSize,

ThreadRoutine routine,

void *context,

int suspended);

Функция создает новый поток.

Входные параметры:

  • priority – приоритет, должен быть в интервале от 0 до 31; доступны следующие константы приоритета: ThreadPriorityLowest (0), ThreadPriorityNormal (15) и ThreadPriorityHighest (31);
  • stackSize – размер стека;
  • routine – функция, которая будет выполняться в потоке;
  • context – аргумент, который будет передан в функцию routine;
  • suspended – позволяет создать поток в приостановленном состоянии (1 – создать приостановленный, 0 – не приостановленный).

Выходные параметры:

  • tid – идентификатор созданного потока.

Пример

int main(int argc, char **argv)

{

Tid tidB;

Tid tidC;

Retcode rcB;

Retcode rcC;

static ThreadContext threadContext[] = {

{.ddi = "B", .deviceName = "/pci/bus0/dev2/fun0/DDI_B"},

{.ddi = "C", .deviceName = "/pci/bus0/dev2/fun0/DDI_C"},

};

rcB = KosThreadCreate(&tidB, ThreadPriorityNormal,

ThreadStackSizeDefault,

FbHotplugThread,

&threadContext[0], 0);

if (rcB != rcOk)

ERR("Failed to start thread %s", threadContext[0].ddi);

rcC = KosThreadCreate(&tidC, ThreadPriorityNormal,

ThreadStackSizeDefault,

FbHotplugThread,

&threadContext[1], 0);

if (rcC != rcOk)

ERR("Failed to start thread %s", threadContext[1].ddi);

/* Ожидание завершения потоков */

...

}

В начало
[Topic kos_thread_create]

KosThreadCurrentId()

Функция объявлена в файле kos/thread.h.

Tid KosThreadCurrentId(void);

Функция запрашивает TID вызывающего потока.

В случае успеха функция возвращает идентификатор потока (TID).

В начало
[Topic kos_thread_current_id]

KosThreadExit()

Функция объявлена в файле kos/thread.h.

void KosThreadExit(rtl_int32_t exitCode);

Функция принудительно завершает текущий поток с кодом выхода exitCode.

В начало
[Topic kos_thread_exit]

KosThreadGetStack()

Функция объявлена в файле kos/thread.h.

void *KosThreadGetStack(Tid tid, rtl_uint32_t *size);

Функция получает стек потока с идентификатором tid.

Выходной параметр size содержит размер стека.

В случае успеха функция возвращает указатель на начало стека.

В начало
[Topic kos_thread_get_stack]

KosThreadOnce()

Функция объявлена в файле kos/thread.h.

typedef int KosThreadOnceState;

Retcode KosThreadOnce(KosThreadOnceState *onceControl,

void (* initRoutine) (void));

Функция позволяет вызвать заданную процедуру initRoutine в точности один раз, даже при вызове из нескольких потоков.

Параметр onceControl предназначен для контроля однократного вызова процедуры.

При успешном вызове процедуры, а также если она уже была вызвана ранее, функция KosThreadOnce() возвращает rcOk.

В начало
[Topic kos_thread_once]

KosThreadResume()

Функция объявлена в файле kos/thread.h.

Retcode KosThreadResume(Tid tid);

Функция возобновляет поток с идентификатором tid, созданный в приостановленном состоянии.

В случае успеха функция возвращает rcOk.

В начало
[Topic kos_thread_resume]

KosThreadSleep()

Функция объявлена в файле kos/thread.h.

Retcode KosThreadSleep(rtl_uint32_t mdelay);

Функция приостанавливает выполнение текущего потока на mdelay миллисекунд.

В случае успеха функция возвращает rcOk.

В начало
[Topic kos_thread_sleep]

KosThreadSuspend()

Функция объявлена в файле kos/thread.h.

Retcode KosThreadSuspend(Tid tid);

Функция необратимо останавливает текущий поток, не завершая его.

Параметр tid должен быть равен идентификатору текущего потока (ограничение текущей имплементации).

В случае успеха функция возвращает rcOk.

В начало
[Topic kos_thread_suspend]

KosThreadTerminate()

Функция объявлена в файле kos/thread.h.

Retcode KosThreadTerminate(Tid tid, rtl_int32_t exitCode);

Функция завершает поток вызывающего процесса. Параметр tid задает идентификатор потока.

Если tid указывает на текущий поток, то параметр exitCode задает код выхода потока.

В случае успеха функция возвращает rcOk.

В начало
[Topic kos_thread_terminate]

KosThreadTlsGet()

Функция объявлена в файле kos/thread.h.

void *KosThreadTlsGet(void);

Функция возвращает указатель на локальное хранилище потока (TLS) или RTL_NULL, если TLS отсутствует.

В начало
[Topic kos_thread_tls_get]

KosThreadTlsSet()

Функция объявлена в файле kos/thread.h.

Retcode KosThreadTlsSet(void *tls);

Функция задает адрес локального хранилища потока (TLS).

Входной аргумент tls содержит адрес TLS.

В начало
[Topic kos_thread_tls_set]

KosThreadWait()

Функция объявлена в файле kos/thread.h.

int KosThreadWait(rtl_uint32_t tid, rtl_uint32_t timeout);

Функция приостанавливает выполнение текущего потока до момента завершения потока с идентификатором tid или до истечения timeout миллисекунд.

Вызов KosThreadWait() с нулевым значением timeout аналогичен вызову KosThreadYield().

В случае успеха функция возвращает rcOk, в случае таймаута rcTimeout.

В начало
[Topic kos_thread_wait]

KosThreadYield()

Функция объявлена в файле kos/thread.h.

void KosThreadYield(void);

Функция передает выполнение вызвавшего ее потока следующему потоку.

Вызов KosThreadYield() аналогичен вызову KosThreadSleep() с нулевым значением mdelay.

В начало
[Topic kos_thread_yield]