KasperskyOS Community Edition 1.1
[Topic libkos_queues]

KosQueueAlloc()

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

void *KosQueueAlloc(KosQueueHandle queue);

Функция аллоцирует память под новый объект из буфера очереди queue.

В случае успеха функция возвращает указатель на память под объект, если буфер заполнен – RTL_NULL.

В начало
[Topic kos_queue_alloc]

KosQueueCreate()

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

KosQueueHandle KosQueueCreate(unsigned objCount,

unsigned objSize,

unsigned objAlign,

void *buffer);

Функция создает очередь объектов (fifo) и связанный с ней буфер.

Параметры:

  • objCount – максимальное количество объектов в очереди;
  • objSize – размер объекта (байт);
  • objAlign – выравнивание объекта в байтах, должно быть степенью двойки;
  • buffer – указатель на внешний буфер под объекты; если задать его равным RTL_NULL, то буфер будет выделен с помощью функции KosMemAlloc().

Функция возвращает дескриптор созданной очереди и RTL_NULL в случае ошибки.

В начало
[Topic kos_queue_create]

KosQueueDestroy()

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

void KosQueueDestroy(KosQueueHandle queue);

Функция удаляет очередь queue и освобождает выделенный под нее буфер.

В начало
[Topic kos_queue_destroy]

KosQueueFlush()

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

void KosQueueFlush(KosQueueHandle queue);

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

В начало
[Topic kos_queue_flush]

KosQueueFree()

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

void KosQueueFree(KosQueueHandle queue, void *obj);

Функция освобождает память, занимаемую объектом obj в буфере очереди queue.

Указатель obj может быть получен вызовом функции KosQueueAlloc() или KosQueuePop().

Пример использования – см. KosQueuePop().

В начало
[Topic kos_queue_free]

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;

}

В начало
[Topic kos_queue_pop]

KosQueuePush()

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

void KosQueuePush(KosQueueHandle queue, void *obj);

Функция добавляет объект obj в конец очереди queue.

Указатель obj может быть получен вызовом функции KosQueueAlloc() или KosQueuePop().

В начало
[Topic kos_queue_push]