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

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

so_4::timer_thread::simple::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::destroy_all_agent_msg const std::string &  agent_name  )  [pure virtual]
 

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

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

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

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::simple::timer_thread_t.


Документация по SObjectizer. Последние изменения: Thu Jan 12 10:52:52 2006. Создано системой  doxygen 1.4.6-NO
Hosted by uCoz