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

#include <LT_Object.h>

Граф наследования:LT_Object:
TestGen_SK TestGenAlone_SK UObject_SK TestGen TestGenAlone

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

Классы

class  Timer_eq
struct  TimerInfo

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

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)

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

typedef std::list< TimerInfoTimersList

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

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

Методы

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

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

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

Перекрестные ссылки DebugStream::debugging(), UniSetTimer::MinQuantityTime, UniSetTypes::unideb и UniSetTimer::WaitUpTime.

Используется в IONotifyController_LT::askTimer(), UniSetObject_LT::askTimer() и ObjectsManager_LT::askTimer().

timeout_t LT_Object::checkTimers ( UniSetObject obj)

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

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

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

Используется в IONotifyController_LT::callback(), UniSetObject_LT::callback() и ObjectsManager_LT::callback().


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