
Подчиненый диспетчер должен быть динамически созданным объектом, который будет уничтожен в деструкторе диспетчера с активными группами.
Для того, чтобы сделать агент членом активной группы необходимо вызвать метод 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 | setup_dispatcher_binding (so_4::rt::agent_t &agent) |
| Выполнение привязки агента к конкретному ресурсу диспетчера. | |
| 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 ACE_Thread_Mutex & | lock () |
| Замок для синхронизации доступа к внутренним частям диспетчера. | |
Закрытые данные | |
|
std::auto_ptr < so_4::rt::dispatcher_t > | m_subordinate_disp |
| Подчиненный диспетчер. | |
| group_map_t | m_groups |
| Карта существующих активных групп. | |
| agent_map_t | m_agents |
| Карта агентов, являющихся членами активных групп. | |
| bool | m_is_started |
| Признак того, что диспетчер запущен. | |
Закрытые статические данные | |
| static dispatcher_t * | m_instance |
| Указатель на единственный объект диспетчер. Ссылка на этот объект будет передаваться в рабочие нити для активных групп. | |
| so_4::disp::active_group::impl::dispatcher_t::dispatcher_t | ( | so_4::rt::dispatcher_t * | subordinate_disp | ) |
Основной инициализирующий конструктор.
| subordinate_disp | Подчиненный диспетчер. |
Перекрестные ссылки lock() и m_instance.
| ret_code_t so_4::disp::active_group::impl::dispatcher_t::start | ( | ) | [virtual] |
Запустить диспетчер.
Сначала запускается подчиненный диспетчер. Затем, если все прошло нормально, наш диспетчер.
Замещает so_4::rt::dispatcher_t.
Перекрестные ссылки lock(), m_is_started и m_subordinate_disp.
| void so_4::disp::active_group::impl::dispatcher_t::shutdown | ( | ) | [virtual] |
Дать сигнал диспетчеру завершить работу.
Сначала дается сигнал на останов для всех активных групп, затем для подчиненного диспетчера.
Замещает so_4::rt::dispatcher_t.
Перекрестные ссылки lock(), m_groups, m_is_started и m_subordinate_disp.
| void so_4::disp::active_group::impl::dispatcher_t::wait | ( | ) | [virtual] |
Ожидать полного завершения работы диспетчера.
Сначала ожидается завершение всех активных групп, затем ожидается останов подчиненного диспетчера.
Замещает so_4::rt::dispatcher_t.
Перекрестные ссылки so_4::disp::active_group::impl::destroy_active_group_thread_map(), lock(), m_agents, m_groups, m_is_started и m_subordinate_disp.
| void so_4::disp::active_group::impl::dispatcher_t::setup_dispatcher_binding | ( | so_4::rt::agent_t & | agent | ) | [virtual] |
Выполнение привязки агента к конкретному ресурсу диспетчера.
Замещает so_4::rt::dispatcher_t.
Перекрестные ссылки lock(), m_agents, m_groups, m_subordinate_disp, so_4::rt::agent_t::so_query_name() и so_4::rt::agent_t::so_set_dispatcher_binding().
| 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.
Перекрестные ссылки m_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.
Перекрестные ссылки m_subordinate_disp.
| 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 | Имя агента. |
Перекрестные ссылки lock(), m_agents, m_groups, m_instance, m_is_started, so_4::disp::active_group::impl::thread_info_t::m_thread и so_4::disp::reuse::work_thread::work_thread_t::start().
Используется в so_4::disp::active_group::impl::traits_t::init().
| 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 | Имя агента. |
Перекрестные ссылки lock(), m_agents, m_groups, m_instance, m_is_started, so_4::disp::reuse::work_thread::work_thread_t::shutdown() и so_4::disp::reuse::work_thread::work_thread_t::wait().
Используется в so_4::disp::active_group::impl::traits_t::deinit().
bool so_4::disp::active_group::impl::dispatcher_t::m_is_started [private] |
Признак того, что диспетчер запущен.
Используется в introduce_agent(), remove_agent(), shutdown(), start() и wait().
Документация по SObjectizer v.4.4 'Тебуломста'. Последние изменения: Thu Sep 18 10:26:48 2008. Создано системой
1.5.6
|
|