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

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

so_4::rt::dispatcher_t

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


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

Диспетчер с отдельной нитью для каждого "активного объекта" и одной рабочей нитью для всех остальных агентов. На каждой нити имеется приоритетная очередь заявок.

Диспетчер использует внешний объект-таймер. Время жизни объекта-таймера определяется в конструкторе.

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

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

typedef
ACE_Hash_Map_Manager_Ex
< std::string, work_thread_t
*, ACE_Hash< std::string >
, ACE_Equal_To< std::string >
, ACE_Null_Mutex > 
threads_hash_map_t
 Тип hash_table для хранения карты активных агентов.

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

 dispatcher_t (so_4::timer_thread::timer_thread_t *timer, so_4::destroy_timer_flags_t destruction_flag)
 Основной инициализирующий конструктор.
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_active_object (const std::string &agent_name)
 Указать диспетчеру создать нить для нового активного объекта. Нить создается только если нет нити для агента с таким именем.
static void remove_active_object (const std::string &agent_name)
 Указать диспетчеру уничтожить нить для активного объекта.

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

static void destroy_active_obj_thread_set (threads_hash_map_t &s)
 Выполнить очиску множества нитей активных объектов с физическим уничтожением объектов, которые в нем находятся. Ожидание завершения работы нитей не выполняется.

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

so_4::destroy_timer_flags_t m_timer_destruction_flag
 Признак того, что таймер нужно уничтожать в деструкторе.
std::auto_ptr
< so_4::timer_thread::timer_thread_t
m_timer_ptr
 Нить таймера, которую нужно использовать для работы диспетчера.
work_thread_t m_passive_obj_thread
 Единственная нить для пассивных объектов.
bool m_is_started
 Признак того, что диспетчер запущен.

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

typedef ACE_Hash_Map_Manager_Ex< std::string, work_thread_t *, ACE_Hash< std::string >, ACE_Equal_To< std::string >, ACE_Null_Mutex > so_4::disp::active_obj::impl::dispatcher_t::threads_hash_map_t

Тип hash_table для хранения карты активных агентов.

Начиная с:
v.4.4.0-b6


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

so_4::disp::active_obj::impl::dispatcher_t::dispatcher_t ( so_4::timer_thread::timer_thread_t timer,
so_4::destroy_timer_flags_t  destruction_flag 
)

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

Аргументы:
timer  Выделенный диспетчеру таймер. Должен быть динамически созданным объектом, если so_4::rt::auto_destroy_timer == destruction_flag.
destruction_flag  Признак необходимости уничтожения объекта нити таймера в деструкторе.

Перекрестные ссылки so_4::disp::active_obj::impl::context() и so_4::disp::active_obj::impl::context_t::set_active_obj_disp().


Методы

void so_4::disp::active_obj::impl::dispatcher_t::setup_dispatcher_binding ( so_4::rt::agent_t agent  )  [virtual]

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

Начиная с:
v.4.4.0-b6

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

Перекрестные ссылки so_4::disp::active_obj::impl::context(), m_passive_obj_thread, so_4::rt::agent_t::so_query_name() и so_4::rt::agent_t::so_set_dispatcher_binding().

void so_4::disp::active_obj::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_timer_ptr.

void so_4::disp::active_obj::impl::dispatcher_t::introduce_active_object ( const std::string &  agent_name  )  [static]

Указать диспетчеру создать нить для нового активного объекта. Нить создается только если нет нити для агента с таким именем.

Аргументы:
agent_name  Эта строка должна существовать все время, пока существует агент!

Перекрестные ссылки so_4::disp::active_obj::impl::context(), SO_4_ABORT_ON_ACE_ERROR и so_4::disp::active_obj::impl::context_t::try_rehash_threds_hash_map().

Используется в so_4::disp::active_obj::impl::active_obj_traits_t::init().


Данные класса

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

Заметки:
Если m_timer_destruction_flag != so_4::auto_destroy_timer, то этот указатель просто обнуляется в деструкторе.

Используется в destroy_all_agent_msg(), push_delayed_msg(), shutdown(), start() и wait().

Признак того, что диспетчер запущен.

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


Документация по SObjectizer v.4.4 'Тебуломста'. Последние изменения: Thu Sep 18 10:26:48 2008. Создано системой  doxygen1.5.6 Intervale SourceForge.net Logo