Класс so_4::disp::active_group::impl::dispatcher_t

Граф наследования:so_4::disp::active_group::impl::dispatcher_t:

so_4::rt::dispatcher_t Полный список членов класса

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

Диспетчер с активными группами.

Начиная с:
v.4.2.6
Все агенты, составляющие активную группу работают на контексте одной нити, выделенной этой группе.

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

Подчиненый диспетчер должен быть динамически созданным объектом, который будет уничтожен в деструкторе диспетчера с активными группами.

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

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

Внимание:
данный класс спроектирован так, чтобы в программе был только один объект этого типа.


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

 dispatcher_t (so_4::rt::dispatcher_t *subordinate_disp)
 Основной инициализирующий конструктор.
virtual ret_code_t start ()
 Запустить диспетчер.
virtual void shutdown ()
 Дать сигнал диспетчеру завершить работу.
virtual void wait ()
 Ожидать полного завершения работы диспетчера.
virtual void dispatch (int priority, const so_4::rt::event_data_t &event_data)
 Выполнить диспетчеризацию события.
virtual void push_delayed_msg (const so_4::rt::msg_data_t &msg_data, unsigned int delay, unsigned int period=0)
 Поставить отложенное сообщение в очередь.
virtual void destroy_all_agent_msg (const std::string &agent_name)
 Изъять все ожидающие сообщения данного агента.

Открытые статические члены

static void introduce_agent (const std::string &group_name, const std::string &agent_name)
 Добавить еще одного агента в активную группу.
static void remove_agent (const std::string &group_name, const std::string &agent_name)
 Изъять агента из активной группы.

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

static threads_1::mutex_sem_t & lock ()
 частям диспетчера.

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

auto_ptr_3::obj_ptr_t< so_4::rt::dispatcher_tm_subordinate_disp
 Подчиненный диспетчер.
group_map_t m_groups
 Карта существующих активных групп.
agent_map_t m_agents
 Карта агентов, являющихся членами активных групп.

Закрытые статические данные

static dispatcher_tm_instance
 рабочие нити для активных групп.


Конструктор(ы)

so_4::disp::active_group::impl::dispatcher_t::dispatcher_t so_4::rt::dispatcher_t subordinate_disp  ) 
 

Основной инициализирующий конструктор.

Аргументы:
subordinate_disp  Подчиненный диспетчер.


Методы

void so_4::disp::active_group::impl::dispatcher_t::destroy_all_agent_msg const std::string &  agent_name  )  [virtual]
 

Изъять все ожидающие сообщения данного агента.

Задействуется подчиненный диспетчер.

Замещает so_4::rt::dispatcher_t.

void so_4::disp::active_group::impl::dispatcher_t::dispatch int  priority,
const so_4::rt::event_data_t event_data
[virtual]
 

Выполнить диспетчеризацию события.

Если событие относится к агенту из активной группы, то событие передается в рабочую очередь этой активной группы. В противном случае событие передается подчиненному диспетчеру.

Замещает so_4::rt::dispatcher_t.

void so_4::disp::active_group::impl::dispatcher_t::introduce_agent const std::string &  group_name,
const std::string &  agent_name
[static]
 

Добавить еще одного агента в активную группу.

Аргументы:
group_name  Имя активной группы.
agent_name  Имя агента.

void so_4::disp::active_group::impl::dispatcher_t::push_delayed_msg const so_4::rt::msg_data_t msg_data,
unsigned int  delay,
unsigned int  period = 0
[virtual]
 

Поставить отложенное сообщение в очередь.

Задействуется подчиненный диспетчер.

Аргументы:
delay  Для переодического сообщения указывает время, через которое сообщение должно возникнуть в первый раз
period  Отличен от 0 для переодических сообщений

Замещает so_4::rt::dispatcher_t.

void so_4::disp::active_group::impl::dispatcher_t::remove_agent const std::string &  group_name,
const std::string &  agent_name
[static]
 

Изъять агента из активной группы.

Аргументы:
group_name  Имя активной группы.
agent_name  Имя агента.

void so_4::disp::active_group::impl::dispatcher_t::shutdown  )  [virtual]
 

Дать сигнал диспетчеру завершить работу.

Сначала дается сигнал на останов для всех активных групп, затем для подчиненного диспетчера.

Замещает so_4::rt::dispatcher_t.

ret_code_t so_4::disp::active_group::impl::dispatcher_t::start  )  [virtual]
 

Запустить диспетчер.

Сначала запускается подчиненный диспетчер. Затем, если все прошло нормально, наш диспетчер.

Замещает so_4::rt::dispatcher_t.

void so_4::disp::active_group::impl::dispatcher_t::wait  )  [virtual]
 

Ожидать полного завершения работы диспетчера.

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

Замещает so_4::rt::dispatcher_t.


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