我有一个需要定期执行某些操作的Windows服务。我应该使用waitable timer objects还是timer queues?
这两种方法的优点和缺点是什么?这是一个错误的二分法吗?还有第三种方式吗?
答案 0 :(得分:7)
等待计时器旨在通过APC激活代码。由于重新入侵问题,这很难做到正确,只有当你需要在一个被占用的线程上运行代码但是通常足以允许APC运行的线程时才应该考虑。
计时器队列是非常轻量级的对象,它们的回调运行在来自线程池的(廉价)线程上。几乎总是有利于定期服务。
第三种方法是在服务启动时启动一个线程,并使用WaitForSingleObject()来阻止其超时设置周期。你会等待一个表明服务应该停止的事件。非常容易上手,不像计时器队列那样精简。