如何在Windows上使用C ++实现长期的高分辨率定时?

我需要长时间(几个小时)每几毫秒(20,30,40毫秒)得到确切的时间戳。 采用时间戳的function被第三方库调用为callback。

使用GetSystemTime()可以得到正确的系统时间戳,但只有毫秒的准确度,这对我来说不够精确。 使用QueryPerformanceTimer()生成更准确的时间戳,但与系统时间戳在很长一段时间内不同步(请参阅http://msdn.microsoft.com/zh-cn/magazine/cc163996.aspx )。

在上面链接的网站提供的解决scheme不知何故只适用于旧电脑,它在同步时挂起,当我尝试使用新电脑。

在我看来,提升也只能以毫秒级的精度工作。 如果可能的话,我想避免使用外部库,但如果没有其他select,我会去用它。

有什么build议么?

谢谢。

从CodeProject删除的文章,这似乎是复制: DateTimePrecise C#类的想法是使用QueryPerformanceCounter API准确的小增量,并定期调整,以保持长期的准确性。 这就是微妙的精度(“约”,因为它仍然不完全精确,但仍然相当有用)。

另请参阅: Windows上的微秒解析时间戳

你使用哪种语言?

  • 在Java(1.5或以上),我会建议'System.nanoTime()'不需要导入。

在Windows中记住,时间片粒度是1000ms / 64 = 15.625ms。

  • 这将影响进程间通信,尤其是在单处理器机器上,或者同时运行多个CPU使用率过程的机器。

  • 事实上,我刚刚通过eBay获得了DOS 6.22和Windows for Workgroups 3.11 / 3.15,所以我可以在开始进入该时代的时候,为单处理器Windows机器截图原始时间片配置。 (虽然它可能不会在3.0以上的版本中可见)。

在Windows上,您将很难找到比QueryPerformanceTimer()更好的东西。

在现代硬件上,它使用HPET作为替代RTC中断控制器的源。 我期望QueryPerformanceTimer()和系统时钟是同步的。

在Windows上没有这样的QueryPerformanceTimer()。 该资源被命名为QueryPerformanceCounter() 。 它提供了一个计数器值在更高的频率计数。 其递增频率可以通过调用QueryPerformanceFrequency()来检索。 由于这个频率通常在MHz范围内,因此可以观察到微秒的分辨率。

有一些实现, 即这个线程或在Windows时间戳项目