我正在使用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的已知issue,因此您可能要确保没有这些芯片组。另外,某些双核AMD也可能会导致problem。参见sebbbi的第二篇文章,他在其中指出:



从这个answer

关于timer - CPU时钟频率因而QueryPerformanceCounter错误吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/644510/

10-11 16:08