1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/brinkqiang-dmtimer

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
tutorial.md 5.8 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 27.11.2024 21:37 bee2048

Использование dmtimer

Выполнение timer

В dmtimer основной класс — CDMTimerModule, он определён в include/dmtimermodule.h. Это синглтон, его экземпляр можно получить через CDMTimerModule::Instance().

При вызове CDMTimerModule::Instance()->Run() выполняется все просроченные таймеры. Обычно метод Run() вызывают из главного цикла программы, чтобы выполнить все просроченные таймеры.

Регистрация и отмена timer

Чтобы зарегистрировать таймер в 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 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/brinkqiang-dmtimer.git
git@api.gitlife.ru:oschina-mirror/brinkqiang-dmtimer.git
oschina-mirror
brinkqiang-dmtimer
brinkqiang-dmtimer
master