我正在使用QueryPerformanceCounter来计算一些代码.当代码开始报告时间明显错误时,我感到震惊.要将QPC的结果转换为"实际"时间,您需要除以QueryPerformanceFrequency返回的频率,因此经过的时间为:
时间=(QPC.end - QPC.start)/ QPF
重启后,QPF频率从2.7 GHz变为4.1 GHz.我认为实际硬件频率没有改变,因为运行程序的挂钟时间没有变化,尽管使用QPC报告的时间确实发生了变化(下降了2.7/4.1).
MyComputer-> Properties显示:
英特尔(R)奔腾(R)4 CPU 2.80 GHz; 4.11 GHz; 1.99 GB的RAM; 物理地址扩展
除此之外,该系统似乎工作正常.
我将尝试重新启动以查看问题是否清除,但我担心这些关键性能计数器可能会在没有警告的情况下变为无效.
更新:
虽然我很欣赏答案,特别是链接,但我没有受影响的芯片组,也没有自己的CPU时钟.根据我的阅读,QPC和QPF基于PCI总线中的定时器,不受CPU时钟变化的影响.在我的情况下奇怪的是QPF报告的FREQUENCY变为不正确的值,并且在MyComputer - > Properties中也报告了这种变化的频率,我当然没有写.
重新启动修复了我的问题(QPF现在报告正确的频率),但我认为如果你打算使用QPC/QPF,你应该在信任它之前对另一个计时器进行验证.
显然,某些芯片组上的 QPC 存在已知问题,因此您可能需要确保您没有这些芯片组。此外,某些双核 AMD 也可能会导致问题。请参阅 sebbbi 的第二篇文章,他在其中指出:
QueryPerformanceCounter() 和 QueryPerformanceFrequency() 提供了更好的分辨率,但存在不同的问题。例如,在Windows XP中,所有AMD Athlon X2双核CPU都会“随机”返回任一核心的PC(PC有时会向后跳一点),除非您专门安装AMD双核驱动程序包来解决该问题。我们还没有注意到任何其他双核+核心CPU有类似的问题(p4 Dual、p4 ht、core2 Dual、core2 Quad、phenom Quad)。
从这个答案来看。