等待定时器还是定时器队列?各有利弊?

Rog*_*mbe 6 winapi

我有一个需要定期做某些事情的Windows服务.我应该使用可等待的计时器对象还是计时器队列

这两种方法的优点和缺点是什么?这是一个错误的二分法吗?还有第三种方式吗?

Han*_*ant 8

一个等待计时器旨在通过APC激活代码.由于重新进入问题,这很难做到正确,只有当你需要在一个被占用的线程上运行代码但是通常足以允许APC运行的线程时才应该考虑这个问题.

定时器队列是非常轻量级的对象,它们的回调运行在来自线程池的(廉价)线程上.几乎总是有利于定期服务.

第三种方法是在服务启动时启动一个线程,并使用WaitForSingleObject()阻塞,其超时设置周期.你会等待一个表明服务应该停止的事件.非常容易上手,不像计时器队列那样精简.

  • 好评.我们倾向于在S​​etWaitableTimer中为完成例程传递NULL,将其转换为正常的,可等待的句柄.任何使用它的优点/缺点与计时器队列? (2认同)