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

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

so_4::rt::dispatcher_t so_4::rt::dispatcher_binding_t

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


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

Диспетчер для Qt.

Начиная с:
v.4.2.6.1 Диспетчер обслуживает только агентов, которые должны работать на Qt GUI нити. Остальных агентов и нить таймера должен обслуживать дополнительный диспетчер, которые передается диспетчеру с активными группами в качестве параметра.
Подчиненый диспетчер должен быть динамически созданным объектом, который будет уничтожен в деструкторе диспетчера с активными группами.

Для того, чтобы сделать агент работал на контексте Qt GUI нити необходимо вызвать метод introduce_agent(). При дерегистрации такого агента необходимо вызвать метод remove_agent().

Внимание:
данный класс спроектирован так, чтобы в программе был только один объект этого типа.
v.4.4.0-b6
Реализует так же интерфейс dispatcher_binding. В методе setup_dispatcher_binding() проверяет, является ли агент агентом главной нити. Если является, то агенту задается указатель на самого себя. В противном случае операция setup_dispatcher_binding() делегируется подчиненному диспетчеру.

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

 dispatcher_t (so_4::rt::dispatcher_t *subordinate_disp, unsigned short qt_event_delta)
 Основной инициализирующий конструктор.
virtual ret_code_t start ()
 Запустить диспетчер.
virtual void shutdown ()
 Дать сигнал диспетчеру завершить работу.
virtual void wait ()
 Ожидать полного завершения работы диспетчера.
virtual void setup_dispatcher_binding (so_4::rt::agent_t &agent)
 Выполнение привязки агента к конкретному ресурсу диспетчера.
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 &agent_name)
 Добавить еще одного агента для Qt GUI нити.
static void remove_agent (const std::string &agent_name)
 Изъять агента из Qt GUI нити.
static void try_run_qt_ui_agent_event ()
 Попытаться выполнить одну ожидающую заявку для агента Qt GUI нити.

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

typedef std::set< std::string > agent_set_t
 Тип множества имен агентов Qt GUI нити.

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

static ACE_Thread_Mutex & lock ()
 Замок для синхронизации доступа к внутренним частям диспетчера.

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

std::auto_ptr
< so_4::rt::dispatcher_t
m_subordinate_disp
 Подчиненный диспетчер.
std::auto_ptr
< qt_event_processor_t
m_qt_event_processor
 Объект, который отвечает за обработку QEvent-ов, связанных с нашим диспетчером.
so_4::disp::reuse::gui_work_indicator::indicator_t m_gui_work
 Индикатор того, что GUI нить выполняет обработку события.
agent_set_t m_agents
 Имена агентов Qt GUI нити.
demand_queue_t m_demands
 Очередь заявок для агентов Qt GUI нити.
unsigned short m_qt_event_delta
 Значение для получения уникального идентификатора QEvent.

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

static dispatcher_tm_instance
 Указатель на единственный объект диспетчер. Ссылка на этот объект будет передаваться в рабочие нити для активных групп.

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

so_4::disp::qt_ui::impl::dispatcher_t::dispatcher_t ( so_4::rt::dispatcher_t subordinate_disp,
unsigned short  qt_event_delta 
)

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

Аргументы:
subordinate_disp  Подчиненный диспетчер.
qt_event_delta  Значение для получения уникального идентификатора QEvent.

Перекрестные ссылки lock() и m_instance.


Методы

ret_code_t so_4::disp::qt_ui::impl::dispatcher_t::start (  )  [virtual]

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

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

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

Перекрестные ссылки m_demands, m_subordinate_disp и so_4::disp::reuse::work_thread::demand_queue_t::start().

void so_4::disp::qt_ui::impl::dispatcher_t::shutdown (  )  [virtual]

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

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

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

Перекрестные ссылки m_demands, m_subordinate_disp и so_4::disp::reuse::work_thread::demand_queue_t::shutdown().

void so_4::disp::qt_ui::impl::dispatcher_t::wait (  )  [virtual]

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

Сначала ожидается останов подчиненного диспетчера, затем уничтожаются все ожидающие заявки для агентов Qt GUI нити.

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

Перекрестные ссылки so_4::disp::reuse::work_thread::demand_queue_t::destroy_all_demands(), m_agents, m_demands, m_gui_work, m_subordinate_disp и so_4::disp::reuse::gui_work_indicator::indicator_handler_t::wait_finish().

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

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

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

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

Перекрестные ссылки lock(), m_agents, m_subordinate_disp, so_4::rt::agent_t::so_query_name() и so_4::rt::agent_t::so_set_dispatcher_binding().

void so_4::disp::qt_ui::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::qt_ui::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::qt_ui::impl::dispatcher_t::introduce_agent ( const std::string &  agent_name  )  [static]

Добавить еще одного агента для Qt GUI нити.

Аргументы:
agent_name  Имя агента.

Перекрестные ссылки lock(), m_agents и m_instance.

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

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

Изъять агента из Qt GUI нити.

Аргументы:
agent_name  Имя агента.

Перекрестные ссылки lock(), m_agents и m_instance.

Используется в so_4::disp::qt_ui::impl::traits_t::deinit().

void so_4::disp::qt_ui::impl::dispatcher_t::try_run_qt_ui_agent_event (  )  [static]

Попытаться выполнить одну ожидающую заявку для агента Qt GUI нити.

Внимание:
Данный метод должен вызываться только на контексте Qt GUI нити!

Перекрестные ссылки so_4::disp::reuse::work_thread::demand_queue_t::demand_extracted, so_4::disp::reuse::gui_work_indicator::indicator_handler_t::finished(), m_demands, m_gui_work, m_instance, so_4::disp::reuse::work_thread::demand_queue_t::no_demands, so_4::disp::reuse::work_thread::demand_queue_t::pop(), so_4::rt::event_data_t::run_event_action(), so_4::disp::reuse::gui_work_indicator::indicator_handler_t::started() и so_4::rt::event_data_t::terminate_event_life().

Используется в so_4::disp::qt_ui::impl::qt_event_processor_t::event().


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