如何在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流程(我感觉不舒服)?
答案 0 :(得分:3)
我喜欢CreateWaitableTimer
。您可以使用WaitForSingleObject
,使用WaitForMultipleObjects
的共享工作人员在专用工作线程上等待它,或者甚至在您的UI线程上通过编写主消息循环来使用MsgWaitForMultipleObjects
。
除非您的系统严重超载,否则您的5ms精度应该是可以实现的。线程优先级可以提供帮助,但I / O很少有优先级,因此如果您对文件执行阻塞读取,则可以从优先级较低的线程将同一磁盘的读取请求排在后面。尝试提前加载任何数据或使用重叠请求,并处理在您的计时器间隔到期时请求尚未完成的情况。
我绝对会建议使用timeBeginPeriod
来使所有系统计时器更精确。