【发布时间】:2015-03-21 11:39:34
【问题描述】:
关于 stackoverflow 上的高分辨率计时器已经有很多说法。但很明显,该解决方案是一个移动的目标,最佳实践正在发生变化。
我需要创建一个高分辨率计时器,它每 10 毫秒回调一次,以实现一致的 100Hz。目标平台是 Windows 7 及更高版本。
这个exact question was asked in 2009,但我相信事情可能已经发生了变化。
多媒体定时器看起来是一个很好的解决方案,但 MSDN 说它们是 depreciated,被 CreateTimerQueueTimer 取代。但是关于 stackoverflow 的其他答案表明 CreateTimerQueue 计时器不如 timeSetEvent 准确。
所有答案都一致地指出了使用 timeBeginPeriod 将 Windows 计时器分辨率设置为低值的要求。
综上所述,今天在 C 中实现上述预期目标的最佳方法是什么。
【问题讨论】:
-
您需要每 10 毫秒回调一次,但您要寻找的准确度是多少? 0.1?, 1%? 10%?
-
您可以使用 MinGW 和
timeb.h,这将为您提供struct timeb,包括毫秒。 -
我真的不认为 win7 在这方面做得很好,因为它不是作为实时操作系统设计的。如果您有非常严格的实时限制,请尝试其他一些实时操作系统,它可能提供了一大堆用于调度和计时的 API。
-
如果您说您使用的是 C,为什么还要有 c++ 标签? C 和 C++ 是不同的语言,我在您的问题中没有看到 C++ 特定的内容。
-
@mins 大约 0.1 毫秒是关于我正在寻找的准确性。或者换一种说法 +/-1%。