UniSet  2.6.0
Классы | Открытые члены | Защищенные типы | Защищенные члены | Защищенные данные
Класс uniset::LT_Object
Граф наследования:uniset::LT_Object:
Inheritance graph
[см. легенду]

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

Классы

class  Timer_eq
struct  TimerInfo

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

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

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

typedef std::deque< TimerInfoTimersList

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

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

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

timeout_t sleepTime

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

Заметки:
'_LT' - это "local timers". Класс реализующий механиз локальных таймеров. Обеспечивает более надёжную работу т.к. позволяет обходится без удалённого заказа таймеров у TimеService-а. Но следует помнить, что при этом объект использующий такие таймеры становится более ресурсоёмким, т.к. во время работы поток обработки сообщений не "спит", как у обычного UniSetObject-а, а тратит время на проверку таймеров (правда при условии, что в списке есть хотябы один заказ)
Основной принцип
Проверяет список таймеров и при срабатывании формирует стандартное уведомление uniset::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

Методы

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

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

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

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

timeout_t LT_Object::checkTimers ( UniSetObject obj)

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

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

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

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

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

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

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

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


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

timeout_t uniset::LT_Object::sleepTime [protected]

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