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

Диспетчер обслуживает только агентов, которые входят в активные группы. Остальных агентов и нить таймера должен обслуживать дополнительный диспетчер, которые передается диспетчеру с активными группами в качестве параметра.
Подчиненый диспетчер должен быть динамически созданным объектом, который будет уничтожен в деструкторе диспетчера с активными группами.
Для того, чтобы сделать агент членом активной группы необходимо вызвать метод 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_t > | m_subordinate_disp |
| Подчиненный диспетчер. | |
| group_map_t | m_groups |
| Карта существующих активных групп. | |
| agent_map_t | m_agents |
| Карта агентов, являющихся членами активных групп. | |
Закрытые статические данные | |
| static dispatcher_t * | m_instance |
| рабочие нити для активных групп. | |
|
|
Основной инициализирующий конструктор.
|
|
|
Изъять все ожидающие сообщения данного агента. Задействуется подчиненный диспетчер. Замещает so_4::rt::dispatcher_t. |
|
||||||||||||
|
Выполнить диспетчеризацию события. Если событие относится к агенту из активной группы, то событие передается в рабочую очередь этой активной группы. В противном случае событие передается подчиненному диспетчеру. Замещает so_4::rt::dispatcher_t. |
|
||||||||||||
|
Добавить еще одного агента в активную группу.
|
|
||||||||||||||||
|
Поставить отложенное сообщение в очередь. Задействуется подчиненный диспетчер.
Замещает so_4::rt::dispatcher_t. |
|
||||||||||||
|
Изъять агента из активной группы.
|
|
|
Дать сигнал диспетчеру завершить работу. Сначала дается сигнал на останов для всех активных групп, затем для подчиненного диспетчера. Замещает so_4::rt::dispatcher_t. |
|
|
Запустить диспетчер. Сначала запускается подчиненный диспетчер. Затем, если все прошло нормально, наш диспетчер. Замещает so_4::rt::dispatcher_t. |
|
|
Ожидать полного завершения работы диспетчера. Сначала ожидается завершение всех активных групп, затем ожидается останов подчиненного диспетчера. Замещает so_4::rt::dispatcher_t. |
1.4.6-NO