В dmtimer основной класс — CDMTimerModule, он определён в include/dmtimermodule.h
. Это синглтон, его экземпляр можно получить через CDMTimerModule::Instance()
.
При вызове CDMTimerModule::Instance()->Run()
выполняется все просроченные таймеры. Обычно метод Run()
вызывают из главного цикла программы, чтобы выполнить все просроченные таймеры.
Чтобы зарегистрировать таймер в dmtimer, нужно унаследовать класс CDMTimerNode и реализовать его метод OnTimer
.
OnTimer
— это функция обратного вызова, которая вызывается при истечении таймера. Она имеет два параметра:
qwIDEvent
— идентификатор таймера, который используется при регистрации. В одном объекте этот идентификатор должен быть уникальным.const dm::any& oAny
— дополнительные данные, связанные с этим таймером.Интерфейс для регистрации таймеров:
bool CDMTimerNode::SetTimer(uint64_t qwIDEvent, uint64_t qwElapse);
bool CDMTimerNode::SetTimerCron(uint64_t qwIDEvent, const std::string& strCron, DMFunction fFun);
bool CDMTimerNode::SetTimerLambda(uint64_t qwIDEvent, uint64_t qwElapse, DMFunction fFun);
bool CDMTimerNode::SetTimerLambda(uint64_t qwIDEvent, uint64_t qwElapse, uint64_t qwFirst, DMFunction fFun);
bool CDMTimerNode::SetTimerLambda(uint64_t qwIDEvent, uint64_t qwElapse, uint64_t qwFirst, const dm::any& oAny, bool bExact, DMFunction fFun);
bool CDMTimerNode::SetTimer(uint64_t qwIDEvent, uint64_t qwElapse);
bool CDMTimerNode::SetTimer(uint64_t qwIDEvent, uint64_t qwElapse, const dm::any& oAny, bool bExact = false);
bool CDMTimerNode::SetTimer(uint64_t qwIDEvent, uint64_t qwElapse, uint64_t qwFirst);
bool CDMTimerNode::SetTimer(uint64_t qwIDEvent, uint64_t qwElapse, uint64_t qwFirst, const dm::any& oAny, bool bExact = false);
bool CDMTimerNode::SetTimer(uint64_t qwIDEvent, uint64_t qwElapse, uint64_t qwFirst, const dm::any& oAny, bool bExact);
uint64_t qwIDEvent
— это идентификатор таймера. Когда таймер истечёт, этот идентификатор будет передан в функцию обратного вызова OnTimer
. В одном объекте идентификаторы таймеров должны быть уникальными.uint64_t qwElapse
— время ожидания в миллисекундах от текущего момента.uint64_t qwFirst
— момент первого срабатывания таймера. Обычно он равен qwElapse
.const dm::any& oAny
— дополнительные данные для этого таймера.bool bExact
— механизм вызова таймера. Если false
(по умолчанию), то таймер может не сработать, если система занята. Если true
, то таймер сработает точно в указанное время, но может вызвать проблемы с производительностью.Все идентификаторы таймеров в одном объекте уникальны. Если попытаться зарегистрировать уже существующий идентификатор, старый таймер будет заменён новым.
Для отмены таймера используется интерфейс:
void CDMTimerNode::KillTimer(uint64_t qwIDEvent);
qwIDEvent
— идентификатор отменяемого таймера. Отмена несуществующего таймера игнорируется. void CDMTimerNode::KillTimer();
Получить время работы таймера:
uint64_t CDMTimerNode::GetTimerElapse(uint64_t qwIDEvent);
uint64_t qwIDEvent
— идентификатор таймера. Возвращаемое значение — время в миллисекундах, прошедшее с момента запуска таймера до текущего момента.Получить оставшееся время до вызова таймера:
uint64_t CDMTimerNode::GetTimerRemain(uint64_t qwIDEvent);
uint64_t qwIDEvent
— идентификатор таймера. Возвращаемое значение — оставшееся время в миллисекундах до следующего вызова таймера.Установить глобальную скорость таймеров:
void CDMTimerModule::SetSpeed(uint32_t dwSpeed);
uint32_t dwSpeed
— коэффициент скорости. Значение 10000 соответствует нормальной скорости, а 20000 — удвоенной скорости.Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )