Класс so_4::timer_thread::timer_thread_t

Граф наследования:so_4::timer_thread::timer_thread_t:

so_4::timer_thread::ace_timer_queue_adapter::impl::timer_thread_t

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


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

Интерфейс нити таймера.

Диспетчеру run-time SObjectizer-а необходимы средства для работы с отложенными и переодическими сообщениями. Точность отсчета времени для различных задач может сильно различаться. Для некоторых задач необходима точность до милли- или микросекунд, для некоторых достаточно точности в секундах. Механизмы диспетчеризации для отсчета времени практически не играют роли.

Поэтому в SObjectizer-е разделены понятия диспетчера (интерфейс so_4::rt::dispatcher_t) и таймера (интерфейс so_4::timer_thread::timer_thread_t) для того, чтобы их можно было сочетать в различных комбинациях.

Все реальные таймеры для SObjectizer-а должны быть производными от timer_thread_t.

Настоящий таймер не обязательно должен быть реализован в виде нити. Название timer_thread_t сложилось исторически. Важно, что диспетчер запускает таймер при своем старте посредством метода timer_thread_t::start() и останавливает таймер при завершении работы посредством timer_thread_t::shutdown(). Т.к. при реализации таймера в виде отдельной нити сложно обеспечить, чтобы выход из shutdown() означал завершение работы нити таймера, то введен метод wait(). Диспетчер вызывает wait() сразу после вызова shutdown() и возврат из wait() означает, что таймер полностью остановлен и все ресурсы, захваченные таймером, освобождены.

Когда у диспетчера вызывается метод push_delayed_msg диспетчер передает сообщение таймеру. Далее таймер отвечает за хранение экземпляра сообщения и за определение времени когда сообщение должно быть диспетчеризировано. Доставка сообщения на диспетчеризацию осуществляется функцией so_4::api::_deliver_msg(). Если сообщение переодическое, то таймер отвечает за последующие переодические обращения к so_4::api::_deliver_msg().

При дерегистрации агента run-time вызывает у диспетчера метод destroy_all_agent_msg. Диспетчер вызывает метод destroy_all_agent_msg() у таймера. В этом методе таймер должен уничтожить все экземпляры отложенных и переодических сообщений данного агента. В противном случае агент не сможет быть дерегистрирован, т.к. каждый существующий экземпляр сообщения агента увеличивает количество ссылок на агента. А дерегистрация агента осуществляется только когда количество ссылок на агента обнуляется.

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

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


Методы

virtual void so_4::timer_thread::timer_thread_t::push_msg ( const so_4::rt::msg_data_t msg_data,
unsigned int  delay,
unsigned int  period = 0 
) [pure virtual]

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

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

Замещается в so_4::timer_thread::ace_timer_queue_adapter::impl::timer_thread_t.

Используется в so_4::disp::one_thread::impl::dispatcher_t::push_delayed_msg().

virtual void so_4::timer_thread::timer_thread_t::destroy_all_agent_msg ( const std::string &  agent_name  )  [pure virtual]

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

Аргументы:
agent_name  Имя агента, чьи сообщения должны быть изъяты из таймера.

Замещается в so_4::timer_thread::ace_timer_queue_adapter::impl::timer_thread_t.

Используется в so_4::disp::one_thread::impl::dispatcher_t::destroy_all_agent_msg().


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