Содержание
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;
}