如何在Windows中以30ms的间隔执行10ms CPU时间操作?

时间:2014-09-24 14:15:02

标签: windows multithreading visual-c++ timer

如何在Windows中执行需要大约10毫秒CPU时间,间隔为30毫秒的操作? (我可以允许+/- 5ms保证金)

我试过Sleep API已经失败了:)

接下来,我想到了MM Timer API。但是这篇博文说它无法完成 Why are the Multimedia Timer APIs (timeSetEvent) not as accurate as I would expect?

此外,MSDN说timeSetEvent已经过时,我们必须使用CreateTimerQueueTimer API。 http://msdn.microsoft.com/en-us/library/dd757634(v=vs.85).aspx

CreateTimerQueueTimer能成为解决方案吗?

或者我是否需要使用REALTIME_PRIORITY_CLASS流程(我感觉不舒服)?

1 个答案:

答案 0 :(得分:3)

我喜欢CreateWaitableTimer。您可以使用WaitForSingleObject,使用WaitForMultipleObjects的共享工作人员在专用工作线程上等待它,或者甚至在您的UI线程上通过编写主消息循环来使用MsgWaitForMultipleObjects

除非您的系统严重超载,否则您的5ms精度应该是可以实现的。线程优先级可以提供帮助,但I / O很少有优先级,因此如果您对文件执行阻塞读取,则可以从优先级较低的线程将同一磁盘的读取请求排在后面。尝试提前加载任何数据或使用重叠请求,并处理在您的计时器间隔到期时请求尚未完成的情况。

我绝对会建议使用timeBeginPeriod来使所有系统计时器更精确。