Содержание
KosQueueAlloc()
Функция объявлена в файле kos/queue.h
.
void *KosQueueAlloc(KosQueueHandle queue);
Функция аллоцирует память под новый объект из буфера очереди queue
.
В случае успеха функция возвращает указатель на память под объект, если буфер заполнен – RTL_NULL.
В началоKosQueueCreate()
Функция объявлена в файле kos/queue.h
.
KosQueueHandle KosQueueCreate(unsigned objCount,
unsigned objSize,
unsigned objAlign,
void *buffer);
Функция создает очередь объектов (fifo) и связанный с ней буфер.
Параметры:
objCount
– максимальное количество объектов в очереди;objSize
– размер объекта (байт);objAlign
– выравнивание объекта в байтах, должно быть степенью двойки;buffer
– указатель на внешний буфер под объекты; если задать его равным RTL_NULL, то буфер будет выделен с помощью функцииKosMemAlloc()
.
Функция возвращает дескриптор созданной очереди и RTL_NULL в случае ошибки.
В началоKosQueueDestroy()
Функция объявлена в файле kos/queue.h
.
void KosQueueDestroy(KosQueueHandle queue);
Функция удаляет очередь queue
и освобождает выделенный под нее буфер.
KosQueueFlush()
Функция объявлена в файле kos/queue.h
.
void KosQueueFlush(KosQueueHandle queue);
Функция извлекает все объекты из очереди queue
и освобождает всю память, занятую ими.
KosQueueFree()
Функция объявлена в файле kos/queue.h
.
void KosQueueFree(KosQueueHandle queue, void *obj);
Функция освобождает память, занимаемую объектом obj
в буфере очереди queue
.
Указатель obj
может быть получен вызовом функции KosQueueAlloc()
или KosQueuePop()
.
Пример использования – см. KosQueuePop()
.
KosQueuePop()
Функция объявлена в файле kos/queue.h
.
void *KosQueuePop(KosQueueHandle queue, rtl_uint32_t timeout);
Функция извлекает из начала очереди queue
объект и возвращает указатель на него.
Параметр timeout
определяет поведение функции в случае, если очередь пуста:
- 0 – немедленный возврат RTL_NULL;
- INFINITE_TIMEOUT – блокировка в ожидании нового объекта в очереди;
- любое другое значение
timeout
– ожидание нового объекта в очереди в течениеtimeout
миллисекунд; по истечении этого времени возвращается RTL_NULL.
Пример
int GpioEventDispatch(void *context)
{
GpioEvent *event;
GpioDevice *device = context;
rtl_bool proceed = rtl_true;
do {
event = KosQueuePop(device->queue, INFINITE_TIMEOUT);
if (event != RTL_NULL) {
if (event->type == GPIO_EVENT_TYPE_THREAD_ABORT) {
proceed = rtl_false;
} else {
GpioDeliverEvent(device, event);
}
KosQueueFree(device->queue, event);
}
} while (proceed);
KosPutObject(device);
return rcOk;
}
KosQueuePush()
Функция объявлена в файле kos/queue.h
.
void KosQueuePush(KosQueueHandle queue, void *obj);
Функция добавляет объект obj
в конец очереди queue
.
Указатель obj
может быть получен вызовом функции KosQueueAlloc()
или KosQueuePop()
.