В системе Windows есть две функции, связанные с таймером: SetTimer и KillTimer (я знаю, имена нечетные - CreateTimer и DestroyTimer были бы более разумными, как в CreateWindow и DestroyWindow, но это то, что доступно).
SetTimer может функционировать в одном из двух режимов: событие таймера может инициировать определенный пользователем обратный вызов или может отправить сообщение в окно. Формат этой функции:
timer_id = SetTimer (window, event_id, interval, callback);
Чтобы использовать обратный вызов:
timer_id = SetTimer (NULL, NULL, interval_in_milliseconds, callback);
Чтобы получить сообщение WM_TIMER в окно:
timer_id = SetTimer (window, event_id, interval_in_milliseconds, NULL);
В обоих случаях вызывающий поток должен иметь очередь сообщений, поскольку оба варианта выдают сообщение WM_TIMER, обработчик по умолчанию вызывает функцию обратного вызова.
В зависимости от используемой ОС значение интервала имеет верхнюю и нижнюю границы. Подробнее см. Документацию API .
Чтобы освободить таймер после того, как вы закончили с ним, сделайте следующее, если вы указали дескриптор окна:
KillTimer (window, event_id); // event_id is important!
и если вы использовали обратный вызов:
KillTimer (NULL, timer_id);
С одним окном может быть связано много таймеров, используйте разные event_id для каждого таймера. Повторное использование event_id останавливает первый экземпляр таймера без отправки сообщения WM_TIMER.
Плюсы: довольно прост в использовании.
Минусы: задержка между окончанием интервала и обработкой сообщения WM_TIMER, разрешение большое, требуется цикл обработки сообщений.