QueryPerformanceCounter 是不是保证在启动后给您时间?
Posted
技术标签:
【中文标题】QueryPerformanceCounter 是不是保证在启动后给您时间?【英文标题】:Is QueryPerformanceCounter guaranteed to give you time since boot?QueryPerformanceCounter 是否保证在启动后给您时间? 【发布时间】:2011-09-15 15:57:37 【问题描述】:假设从QueryPerformanceCounter 返回的计数与自上次系统启动以来的时间有关是否安全?还是可以在系统运行时重置? MSDN 文章本身并不能保证这一点,但是我看到一些第 3 方信息(例如 this)表明情况确实如此。
【问题讨论】:
您可能想要定义“启动”的含义。如果系统进入睡眠或休眠模式,当它唤醒时,计数器将: 1) 重置为 0; 2)从睡觉前停下的地方开始; 3)进行调整以包括它在睡眠/休眠中花费的时间?一般来说,我认为你不能指望QueryPerformanceCounter
给你“启动后的时间”。正如回复所说,这是相对时间。您无法准确地说出基准时间是多少。
【参考方案1】:
它是用来表示相对时间的。但我不认为它可以用来测量自启动以来的时间。
据我所知,它是使用 rdtsc
指令实现的,该指令测量自 CPU 通电以来的“伪”CPU 周期。在那种情况下,是的,它可能确实给出了自启动以来的时间,但我不认为这是指定的。
【讨论】:
It's meant to be used for relative times
ok 所以它可能是 boot + N 的时间。所以它会在启动后不断增加,但不能保证是启动时间的度量?
我没有看到任何“官方”文档说明它测量自启动以来的时间。但是有很多 3rd 方网站说它确实......
即使它是针对相对时间的,它能够满足该使用要求的唯一方法是以稳定的速率单调增加。重置绝对是不可能的;它们会导致负的相对时间。当然,我不知道 Windows 是否保证这里有任何健全的行为(相对于 POSIX,它确实保证CLOCK_MONOTONIC
的健全行为)。以上是关于QueryPerformanceCounter 是不是保证在启动后给您时间?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Queryperformancecounter 的最大延迟和抖动是多少?
QueryPerformanceCounter 抛出不正确的数字