带有计时器队列的Windows上的C ++事件循环

时间:2011-06-06 15:40:21

标签: c++ events loops timer

我正在用C ++编写一个Windows DLL,我需要某种事件循环。 定期检查几个事件,然后DLL在客户端应用程序中触发回调。对于不同的事件,投票期可能会有所不同。

我想知道编码这个的最佳方法是什么。定时精度必须良好,但性能是主要优先事项。 在一个具有不同周期的Windows timer queue中使用多个(4-5)定时器或具有最小周期的单个定时器是否更好?或者我应该选择完全不同的解决方案?

由于

2 个答案:

答案 0 :(得分:0)

什么样的表现是主要优先事项?可重复,准确的计时错误......在Windows等通用操作系统上“非常困难”,因为驱动程序中断很多。有各种计时器机制可以生成非常准确的超时但不可靠。你能容忍多少抖动?你的间隔在什么范围内?回调必须在任何特定的线程上下文中,还是可以触发事件?

RGDS, 马丁

答案 1 :(得分:0)

要直接回答问题,您可以使用SetTimer设置一个计时器,该计时器需要一个通常注册到窗口句柄的nIDEvent。然后,该窗口将接收WM_TIMER条消息,其注册标识符为wParam。使用KillTimer完成计时器后,应该销毁计时器。 WM_TIMER在Windows NT系统上的粒度约为10-15ms。

正如其他海报所说,你可能会因为真正的基于事件的系统而变得更好。也许您可以使用用例编辑帖子,并建议更好的答案。