我需要在很长一段时间(几个小时)内每隔几毫秒(20,30,40毫秒)获得准确的时间戳。采用时间戳的函数作为第三方库的回调调用。
使用GetSystemTime()
可以获得正确的系统时间戳,但只有毫秒精度,这对我来说不够精确。使用QueryPerformanceTimer()
会产生更准确的时间戳,但在很长一段时间内不会与系统时间戳同步(请参阅http://msdn.microsoft.com/en-us/magazine/cc163996.aspx)。
上面链接的站点提供的解决方案仅适用于较旧的计算机,当我尝试与较新的计算机一起使用时,它会在同步时挂起。
在我看来,提升也只是在毫秒精度上工作。 如果可能的话,我想避免使用外部库,但如果没有其他选择,我会继续使用它。
有什么建议吗?
谢谢。
答案 0 :(得分:4)
从CodeProject删除了文章,这似乎是副本:DateTimePrecise C# Class我们的想法是使用QueryPerformanceCounter
API来获得准确的小增量,并定期对其进行调整以保持长期准确性。这将提供微秒精度(“约”因为它仍然不完全精确,但仍然非常可用)。
答案 1 :(得分:0)
您使用的是哪种语言?
请记住,在Windows中,时间片粒度为1000ms / 64 = 15.625ms。
这将影响进程间通信,尤其是在单处理器计算机上,或同时运行多个CPU使用率过高的计算机上*。
事实上,我刚刚通过eBay获得了DOS 6.22和Windows for Workgroups 3.11 / 3.15,因此我可以截取当时我开始进入它的时代的单处理器Windows机器的原始时间片配置。 (虽然它可能在3.0以上的版本中不可见。)
答案 2 :(得分:0)
在Windows上,你很难找到比QueryPerformanceTimer()更好的东西。
在现代硬件上,它使用HPET作为替换RTC中断控制器的源。我希望QueryPerformanceTimer()和系统时钟是同步的。
答案 3 :(得分:0)
Windows上没有这样的QueryPerformanceTimer()。该资源名为QueryPerformanceCounter()
。它提供以较高频率计数的计数器值。
可以通过调用QueryPerformanceFrequency()
来检索其递增频率。
由于此频率通常在MHz范围内,因此可以观察到微秒分辨率。