UniSet  2.2.1
Классы | Открытые члены | Защищенные типы | Защищенные члены | Защищенные данные
Класс LT_Object

#include <LT_Object.h>

Граф наследования:LT_Object:
UniSetObject DBServer IOControl MBExchange MBSlave PassiveLProcessor ProxyManager SMonitor UNetExchange UniSetManager UObject_SK

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

Классы

class  Timer_eq
struct  TimerInfo

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

virtual timeout_t askTimer (UniSetTypes::TimerId timerid, timeout_t timeMS, clock_t ticks=-1, UniSetTypes::Message::Priority p=UniSetTypes::Message::High)
timeout_t checkTimers (UniSetObject *obj)
timeout_t getTimeInterval (UniSetTypes::TimerId timerid)
timeout_t getTimeLeft (UniSetTypes::TimerId timerid)

Защищенные типы

typedef std::deque< TimerInfoTimersList

Защищенные члены

TimersList getTimersList ()
virtual std::string getTimerName (int id)

Защищенные данные

timeout_t sleepTime

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

Заметки:
'_LT' - это "local timers". Класс реализующий механиз локальных таймеров. Обеспечивает более надёжную работу т.к. позволяет обходится без удалённого заказа таймеров у TimеService-а. Но следует помнить, что при этом объект использующий такие таймеры становится более ресурсоёмким, т.к. во время работы поток обработки сообщений не "спит", как у обычного UniSetObject-а, а тратит время на проверку таймеров (правда при условии, что в списке есть хотябы один заказ)
Основной принцип
Проверяет список таймеров и при срабатывании формирует стандартное уведомление UniSetTypes::TimerMessage, которое помещается в очередь указанному объекту. При проверке таймеров, определяется минимальное время оставшееся до очередного срабатывания. Если в списке не остаётся ни одного таймера - возвращает UniSetTimers::WaitUpTime.

Примерный код использования выглядит так:

        class MyClass:
            public UniSetObject
        {
            ...
            int sleepTime;
            UniSetObject_LT lt;
            void callback();
        }

        void callback()
        {
            // При реализации с использованием waitMessage() каждый раз при вызове askTimer() необходимо
            // проверять возвращаемое значение на UniSetTimers::WaitUpTime и вызывать termWaiting(),
            // чтобы избежать ситуации, когда процесс до заказа таймера 'спал'(в функции waitMessage()) и после
            // заказа продолжит спать(т.е. обработчик вызван не будет)...

            try
            {
                if( waitMessage(msg, sleepTime) )
                    processingMessage(&msg);

                sleepTime=lt.checkTimers(this);
            }
            catch(Exception& ex)
            {
                cout << myname << "(callback): " << ex << endl;
            }
        }

        void askTimers()
        {
            // проверяйте возвращаемое значение
            if( lt.askTimer(Timer1, 1000) != UniSetTimer::WaitUpTime )
                termWaiting();
        }
Предупреждения:
Точность работы определяется переодичностью вызова обработчика.
См. также:
TimerService
Необходимо сделать:
Подумать.. может перейти на unordered_map

Методы

timeout_t LT_Object::askTimer ( UniSetTypes::TimerId  timerid,
timeout_t  timeMS,
clock_t  ticks = -1,
UniSetTypes::Message::Priority  p = UniSetTypes::Message::High 
) [virtual]

заказ таймера

Аргументы:
timerid- идентификатор таймера
timeMS- период. 0 - означает отказ от таймера
ticks- количество уведомлений. "-1"- постоянно
p- приоритет присылаемого сообщения
Возвращает:
Возвращает время [мсек] оставшееся до срабатывания очередного таймера

Переопределяется в UniSetObject.

Перекрестные ссылки getTimerName(), UniSetTimer::MinQuantityTime, sleepTime и UniSetTimer::WaitUpTime.

timeout_t LT_Object::checkTimers ( UniSetObject obj)

основная функция обработки.

Аргументы:
obj- указатель на объект, которому посылается уведомление
Возвращает:
Возвращает время [мсек] оставшееся до срабатывания очередного таймера

Перекрестные ссылки PassiveTimer::getCurrent(), UniSetTimer::getLeft(), UniSetTimer::MinQuantityTime, UniSetObject::push(), PassiveTimer::reset(), sleepTime и UniSetTimer::WaitUpTime.

Используется в UniSetObject::callback().

получить текущее время ожидания

получить время на которое установлен таймер timerid

Аргументы:
timerid- идентификатор таймера
Возвращает:
0 - если таймер не найден, время (мсек) если таймер есть.

получить оставшееся время для таймера timerid

Аргументы:
timerid- идентификатор таймера
Возвращает:
0 - если таймер не найден, время (мсек) если таймер есть.
virtual std::string LT_Object::getTimerName ( int  id) [inline, protected, virtual]

пользовательская функция для вывода названия таймера

Используется в askTimer().


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

timeout_t LT_Object::sleepTime [protected]

текущее время ожидания

Используется в askTimer(), UniSetObject::callback() и checkTimers().


Объявления и описания членов классов находятся в файлах: