中等时间间隔的准确时间增量:GetTickCount64与QueryPerformanceCounter

时间:2018-05-15 15:29:35

标签: windows time performancecounter

有很多问题(hereherehere)有关在Windows上获取单调时间的机制及其各种陷阱和陷阱。我对主要选项的准确性(而不是精确度)特别感兴趣。

我希望测量一台机器上的经过时间,当时间大约为几分钟到一小时。到目前为止我所知道的:

  • QueryPerformanceCounter非常适合短时间间隔,但QPF可能会出现500PPM的错误,这意味着一小时内的错误为2秒。
    • 更令人担忧的是,即使在最近的处理器上,folks are seeing QPC misbehavior
    • Microsoft建议QPC高于一切,以进行短期持续时间测量。但短期并未以任何绝对数字定义。
  • GetTickCount64通常被认为是QPC的一个漂亮,可靠,不太精确的选择。
    • 我没有找到任何有关GetTickCount64准确性的详细信息。虽然它不如QPC精确,但它的准确度如何比较?我可能会在一小时内发生什么样的错误?
    • 有些程序使用timeBeginPeriod来解析其分辨率,虽然我不认为这会影响准确性吗?
    • 文档讨论了GetTickCount64的分辨率如何不受GetSystemTimeAdjustment函数所做调整的影响。希望这意味着GetTickCount64是单调的,不会调整吗?这是不寻常的措辞......
  • 如果我通过GetSystemTimePreciseAsFileTime禁用自动时间调整,则
  • SetSystemTimeAdjustment是同机时间增量的选项。它得到了QPC的支持。直接在QPC上使用它有什么好处吗? (也许它会进行消毒或线程相关性技巧,以避免直接QPC调用遇到的一些问题?)

1 个答案:

答案 0 :(得分:1)

我找到一个SO QA linked to this blog post,这对阅读特别有用。虽然它没有直接回答我的问题,但它深入研究了QPC在Windows上的工作方式,以及常见的linux单调时间基本上是如何使用相同的东西。

要点是,当现代硬件上的不变TSC可用时,它们都使用[key in keyof ListOfMethods]: any