Содержание
KosThreadCallback()
Прототип callback-функции объявлен в файле kos/thread.h
.
typedef void KosThreadCallback(KosThreadCallbackReason reason);
/* Аргумент callback-функции */
typedef enum KosThreadCallbackReason {
KosThreadCallbackReasonCreate,
KosThreadCallbackReasonDestroy,
} KosThreadCallbackReason;
При создании нового потока все зарегистрированные callback-функции будут вызваны с аргументом KosThreadCallbackReasonCreate
, при завершении – с аргументом KosThreadCallbackReasonDestroy
.
KosThreadCallbackRegister()
Функция объявлена в файле kos/thread.h
.
Retcode KosThreadCallbackRegister(KosThreadCallback *callback);
Функция регистрирует пользовательскую callback-функцию. При создании и завершении потока будут вызваны все зарегистрированные callback-функции.
В началоKosThreadCallbackUnregister()
Функция объявлена в файле kos/thread.h
.
Retcode KosThreadCallbackUnregister(KosThreadCallback *callback);
Функция дерегистрирует (удаляет из списка вызываемых) пользовательскую callback-функцию.
В начало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);
/* Ожидание завершения потоков */
...
}
KosThreadCurrentId()
Функция объявлена в файле kos/thread.h
.
Tid KosThreadCurrentId(void);
Функция запрашивает TID вызывающего потока.
В случае успеха функция возвращает идентификатор потока (TID).
В началоKosThreadExit()
Функция объявлена в файле kos/thread.h
.
void KosThreadExit(rtl_int32_t exitCode);
Функция принудительно завершает текущий поток с кодом выхода exitCode
.
KosThreadGetStack()
Функция объявлена в файле kos/thread.h
.
void *KosThreadGetStack(Tid tid, rtl_uint32_t *size);
Функция получает стек потока с идентификатором tid
.
Выходной параметр size
содержит размер стека.
В случае успеха функция возвращает указатель на начало стека.
В началоKosThreadOnce()
Функция объявлена в файле kos/thread.h
.
typedef int KosThreadOnceState;
Retcode KosThreadOnce(KosThreadOnceState *onceControl,
void (* initRoutine) (void));
Функция позволяет вызвать заданную процедуру initRoutine
в точности один раз, даже при вызове из нескольких потоков.
Параметр onceControl
предназначен для контроля однократного вызова процедуры.
При успешном вызове процедуры, а также если она уже была вызвана ранее, функция KosThreadOnce()
возвращает rcOk.
KosThreadResume()
Функция объявлена в файле kos/thread.h
.
Retcode KosThreadResume(Tid tid);
Функция возобновляет поток с идентификатором tid
, созданный в приостановленном состоянии.
В случае успеха функция возвращает rcOk.
В началоKosThreadSleep()
Функция объявлена в файле kos/thread.h
.
Retcode KosThreadSleep(rtl_uint32_t mdelay);
Функция приостанавливает выполнение текущего потока на mdelay
миллисекунд.
В случае успеха функция возвращает rcOk.
В началоKosThreadSuspend()
Функция объявлена в файле kos/thread.h
.
Retcode KosThreadSuspend(Tid tid);
Функция необратимо останавливает текущий поток, не завершая его.
Параметр tid
должен быть равен идентификатору текущего потока (ограничение текущей имплементации).
В случае успеха функция возвращает rcOk.
В началоKosThreadTerminate()
Функция объявлена в файле kos/thread.h
.
Retcode KosThreadTerminate(Tid tid, rtl_int32_t exitCode);
Функция завершает поток вызывающего процесса. Параметр tid
задает идентификатор потока.
Если tid
указывает на текущий поток, то параметр exitCode
задает код выхода потока.
В случае успеха функция возвращает rcOk.
В началоKosThreadTlsGet()
Функция объявлена в файле kos/thread.h
.
void *KosThreadTlsGet(void);
Функция возвращает указатель на локальное хранилище потока (TLS) или RTL_NULL, если TLS отсутствует.
В началоKosThreadTlsSet()
Функция объявлена в файле kos/thread.h
.
Retcode KosThreadTlsSet(void *tls);
Функция задает адрес локального хранилища потока (TLS).
Входной аргумент tls
содержит адрес TLS.
KosThreadWait()
Функция объявлена в файле kos/thread.h
.
int KosThreadWait(rtl_uint32_t tid, rtl_uint32_t timeout);
Функция приостанавливает выполнение текущего потока до момента завершения потока с идентификатором tid
или до истечения timeout
миллисекунд.
Вызов KosThreadWait()
с нулевым значением timeout
аналогичен вызову KosThreadYield()
.
В случае успеха функция возвращает rcOk, в случае таймаута rcTimeout.
В началоKosThreadYield()
Функция объявлена в файле kos/thread.h
.
void KosThreadYield(void);
Функция передает выполнение вызвавшего ее потока следующему потоку.
Вызов KosThreadYield()
аналогичен вызову KosThreadSleep()
с нулевым значением mdelay
.