QueryUnbiasedInterruptTime是单调的吗?

时间:2014-01-14 13:45:16

标签: windows winapi time timer

我正试图在Windows上为clock_gettime(CLOCK_MONOTONIC)mach_absolute_time找到合适的替代品。

GetTickCount很烦人,因为它故意偏向:当系统从暂停或休眠状态恢复时,似乎Windows计算出它暂停了多长时间(从主板上)然后将其添加到刻度计数以使其看起来像在系统断电时进行滴答。

QueryUnbiasedInterruptTime更友好:它是一个简单,看似可靠的计数器,它只返回自启动以来系统运行的时间。

现在,我已经尝试了QueryUnbiasedInterruptTime,看看当计算机进入以下各项时会发生什么:睡眠,混合睡眠和休眠。它似乎是正确更新的,因此它看起来是单调的(即,系统在休眠之前将其存储并恢复它以便应用程序不会混淆)。

但是,有一个注释here on the Python dev pages(顺便提一下,它是一个非常有用的时间函数参考资源!):

  

QueryUnbiasedInterruptTime()不是单调的。

我认为有人做了一个测试来确定。这些信息准确吗?如果是这样,出于兴趣,我想知道你必须做些什么才能让返回值倒退。

2 个答案:

答案 0 :(得分:1)

QueryUnbiasedInterruptTime保证是单调的。中断时间没有添加偏差,因此它总是向前拨动,尽管速率有时可能与挂钟略有不同。

我在MSDN中找不到任何好的参考资料,但我现在确信汉斯的评论是正确的,CPython的开发人员一定很困惑。

答案 1 :(得分:0)

GetTickCount的主要问题是该值仅为32位,即每50天正常运行时间重置为零。

您可能需要QueryPerformanceCounter API。