我有一个 Windows 服务,需要定期执行某些操作。我应该使用 waitable timer objects或timer queues ?
这两种方法各有什么优缺点?这是错误的二分法吗?还有第三条路吗?
最佳答案
可等待计时器旨在通过 APC 激活代码。由于重入问题,这一点很难做到正确,只有当您需要在一个被占用但经常阻塞以允许 APC 运行的线程上运行代码时才应该考虑。
计时器队列是非常轻量级的对象,它们的回调在线程池中的(廉价)线程上运行。几乎总是适合定期服务。
第三种方法是在服务启动时启动一个线程,并使用 WaitForSingleObject() 阻塞该线程,其超时设置周期。您将等待一个表明服务应该停止的事件。非常容易上手,不像计时器队列那么精简。
关于winapi - 可等待定时器还是定时器队列?各自的优点和缺点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1915441/