У меня есть служба Windows, которая должна периодически делать определенные вещи. Я должен использовать waitable объекты - таймеры или очереди таймера?
Каковы за и против двух подходов? Действительно ли это - ложная дихотомия? Существует ли третий путь?
Таймер ожидания был разработан для активации кода через APC. Это довольно сложно сделать правильно из-за проблем с повторным входом, и это следует учитывать только в том случае, если вам нужно запустить код в потоке, который в противном случае занят, но блокируется достаточно часто, чтобы позволить APC работать.
Очереди таймеров очень легкие - веса объектов, их обратный вызов выполняется в (дешевом) потоке из пула потоков. Почти всегда подходит для периодической службы.
Третий способ - запустить поток при запуске службы и заблокировать его с помощью WaitForSingleObject (), время ожидания которой устанавливает период. Вы будете ждать события, которое сигнализирует о необходимости остановки службы. Очень легко начать,