Класс so_4::disp::reuse::work_thread::demand_queue_t

Полный список членов класса

Подробное описание

Приоритетная очередь заявок.

Так же хранит признак необходимости завершения работы.

Предназначена для использования несколькими нитями одновременно.


Открытые типы

enum  { demand_extracted, shutting_down }

Открытые члены

void push (int priority, const so_4::rt::event_data_t &event)
 Поместить заявку в очередь.
int pop (so_4::rt::event_data_t *&evt, size_t *remaining_demands_count=0)
 Взять первую заявку.
void start ()
 Сбросить признак необходимости завешения работы.
void shutdown ()
 Выставить признак необходимости завешения работы.
void destroy_all_demands ()
 очереди заявок.

Закрытые типы

typedef std::multimap< int,
so_4::rt::event_data_t *,
std::greater< int > > 
demands_storage_t
 Тип списка приоритетных заявок.

Закрытые члены

void cleanup_demands ()
 Удаление всего содержимого m_demands.

Закрытые данные

so_4::mutex::mutex_sem_t m_lock
so_4::mutex::cond_var_t m_not_empty
demands_storage_t m_demands
 Список заявок, упорядоченных по приоритету.
bool m_shutdown


Определения типов

typedef std::multimap< int, so_4::rt::event_data_t *, std::greater< int > > so_4::disp::reuse::work_thread::demand_queue_t::demands_storage_t [private]
 

Тип списка приоритетных заявок.

Используется объект std::multimap, т.к. по стандарту C++ гарантируется, что в multimap сохраняется порядок занесения элементов с одинаковым значением ключа.


Перечисления

anonymous enum
 

Элементы перечислений:
demand_extracted  Была извлечена заявка.
shutting_down  выставлен признак завершения работы.


Методы

void so_4::disp::reuse::work_thread::demand_queue_t::destroy_all_demands  ) 
 

очереди заявок.

Внимание:
Может вызываться только после вызова метода shutdown.

int so_4::disp::reuse::work_thread::demand_queue_t::pop so_4::rt::event_data_t *&  evt,
size_t *  remaining_demands_count = 0
 

Взять первую заявку.

Первой заявкой является самая старая заявка с самым большим приоритетом.

Если заявок в очереди нет, то текущая нить засыпает до появления заявок в очереди, либо до выставления признака завершения работы.

Если заявка возвращается, то она должна быть уничтожена посредством оператора delete тем, кто извлек заявку из очереди.

Возвращает:
demand_extracted, если из очереди извлечена очередная заявка. shutting_down, если установлен признак завершения работы и все заявки в очереди уничтожены.
Аргументы:
evt  Приемник указателя на зявку.
remaining_demands_count  В случае отличия от нуля сюда помещается текущее количество заявок в очереди. Это значение может использоваться для определения того, будет ли остановлена текущая нить при следующем обращении к pop

void so_4::disp::reuse::work_thread::demand_queue_t::push int  priority,
const so_4::rt::event_data_t event
 

Поместить заявку в очередь.

В очереди создается объект demand_t.

Расположение объекта в очереди определяется приоритетом и возрастом. Добавляемый объект окажется самым последним объектом среди заявок своего приоритета (поскольку он самый молодой).

void so_4::disp::reuse::work_thread::demand_queue_t::start  ) 
 

Сбросить признак необходимости завешения работы.

Должен вызываться при каждом запуске рабочей нити, т.к. после предыдущего останова рабочей нити остается выставленным признак необходимости завершения работы.


Документация по SObjectizer. Последние изменения: Thu Jan 12 10:52:51 2006. Создано системой  doxygen 1.4.6-NO
Hosted by uCoz