我正试图在Windows上为clock_gettime(CLOCK_MONOTONIC)
和mach_absolute_time
找到合适的替代品。
GetTickCount
很烦人,因为它故意偏向:当系统从暂停或休眠状态恢复时,似乎Windows计算出它暂停了多长时间(从主板上)然后将其添加到刻度计数以使其看起来像在系统断电时进行滴答。
QueryUnbiasedInterruptTime
更友好:它是一个简单,看似可靠的计数器,它只返回自启动以来系统运行的时间。
现在,我已经尝试了QueryUnbiasedInterruptTime
,看看当计算机进入以下各项时会发生什么:睡眠,混合睡眠和休眠。它似乎是正确更新的,因此它看起来是单调的(即,系统在休眠之前将其存储并恢复它以便应用程序不会混淆)。
但是,有一个注释here on the Python dev pages(顺便提一下,它是一个非常有用的时间函数参考资源!):
QueryUnbiasedInterruptTime()不是单调的。
我认为有人做了一个测试来确定。这些信息准确吗?如果是这样,出于兴趣,我想知道你必须做些什么才能让返回值倒退。
答案 0 :(得分:1)
QueryUnbiasedInterruptTime
保证是单调的。中断时间没有添加偏差,因此它总是向前拨动,尽管速率有时可能与挂钟略有不同。
我在MSDN中找不到任何好的参考资料,但我现在确信汉斯的评论是正确的,CPython的开发人员一定很困惑。
答案 1 :(得分:0)
GetTickCount的主要问题是该值仅为32位,即每50天正常运行时间重置为零。
您可能需要QueryPerformanceCounter
API。