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