1 Вопрос: Как приостановить таймер, созданный с помощью CreateTimerQueueTimer

вопрос создан в Wed, May 8, 2019 12:00 AM

Мне нужно приостановить таймер, созданный с помощью функции CreateTimerQueueTimer API win32, но я не могу найти способ приостановить таймер. Кто-нибудь знает, возможно ли это?

    
3
  1. Без параметра паузы, вы можете только остановить его и запустить его обратно. Для этого необходимо измерить, сколько времени прошло с момента его приостановки. Используйте GetTickCount64 () при его запуске, снова при его приостановке. Остерегайтесь того, что это в корне неестественно, вы можете обнаружить, что он уже истек, но еще не сделал обратного вызова. В этом случае лучше ничего не делать. Теперь вы знаете, почему у него нет опции паузы:)
    2019-05-08 17: 03: 46Z
1 ответ                              1                         

Полагаю, вы можете позвонить в ChangeTimerQueueTimer и установите для _In_ ULONG Period значение 0. Где аргумент _In_opt_ HANDLE TimerQueue будет NULL, а _Inout_ HANDLE Timer - это РУЧКА, полученная из CreateTimerQueueTimer . Это выполнит обратный вызов в таймере только один раз и остановится. Если вы хотите снова активировать таймер, вы можете снова выполнить ChangeTimerQueueTimer с тем же маркером, обеспечивающим период больше 0 для периодического запуска. В частности, нет API для приостановки таймера, но предотвращение его периодической работы должно быть эквивалентным в вашем случае. Просто обратите внимание, что ваш обратный вызов будет срабатывать один раз после вызова ChangeTimerQueueTimer перед «приостановкой».

    
5
2019-05-08 16: 19: 46Z
  1. DueTime просто задерживает начальное выполнение. «DueTime [in] Время в миллисекундах относительно текущего времени, которое должно пройти до того, как таймер будет сигнализирован в первый раз». Могут быть случаи, когда человек хочет немедленно активировать таймер, а затем сделать паузу в любое случайное время в будущем.
    2019-05-08 16: 16: 24Z
  2. Большое спасибо !!!. Это хороший подход, я думаю, что я могу добавить промежуточный обратный вызов, чтобы избежать обратного вызова пользователя, когда таймер приостановлен.
    2019-05-09 06: 46: 43Z
  3. Ах, да! Хорошая идея, я не подумал об использовании другого обратного вызова для «Приостановки».
    2019-05-09 12: 48: 25Z
источник размещен Вот