Зачем убивать таймер из-за обратного вызова таймера? - PullRequest
0 голосов
/ 07 февраля 2020

В примере Рэймонда о том, как использовать SetTimer для различения guish одиночных и двойных щелчков, он вызывает KillTimer из функции обратного вызова таймера. Я не понимал, почему это будет необходимо. Разве тот факт, что обратный вызов происходит, не означает, что таймер достиг своей конечной точки?

Ответы [ 2 ]

2 голосов
/ 07 февраля 2020

Как ни странно, документация для SetTimer не документирует его поведение. Поведение заключается в том, что вызов устанавливает таймер автоповтора.

Однако в разделе операции таймера вы найдете следующее:

Всякий раз, когда истекает время ожидания По истечении времени таймера система отправляет сообщение WM_TIMER в окно, связанное с таймером.

Этот API-интерфейс не имеет немедленной поддержки однократных таймеров. Чтобы реализовать однократный таймер, вы должны вызвать KillTimer при обработке первого сообщения WM_TIMER.

0 голосов
/ 07 февраля 2020

Таймеры срабатывают повторно с заданной частотой. Вы должны вызвать KillTimer, если вы хотите sh, чтобы прекратить стрельбу.

Так что классическое использование c заключается в создании таймера, а затем его отключении при первом срабатывании. Это известно как таймер одного выстрела.

...