不能仅凭QueryPerformanceFrequency返回的频率一直不变,就判断性能计数器已经停止。按Microsoft Win32当前函数文档,这个函数返回的是计数器每秒计数频率,它在系统启动时固定,并在各处理器之间保持一致;频率是用于换算时间的参数,不是QueryPerformanceCounter返回的当前累计计数,因此频率不变本身只说明换算基准稳定,不能证明计数没有推进。适用上,应把这一判断放在Windows桌面进程的计时API使用范围内,具体处理器架构和调用环境仍以实际函数行为为准。

观察时要把两个输出分开:QueryPerformanceFrequency给出频率,QueryPerformanceCounter给出计数。频率可在应用初始化时获取并缓存,但缓存只在同一次系统启动范围内有效,不应把某台机器某次启动得到的频率跨不同机器或跨不同启动任意复用。真正判断计数器是否在走,要看连续调用QueryPerformanceCounter得到的计数是否变化,而不是盯着频率值。若只看频率不变就下结论,容易把“换算参数稳定”误读成“计数器停止”。
风险主要有三类。第一,把频率当作当前累计计数,混淆了单位与对象,可能得出错误结论。第二,不检查调用返回值和输出对象是否有效,例如输出指针、调用成功与否未确认,就把无效数据当结果。第三,用调CPU电源、修改启动计时参数或超频等方式去“验证”,这些做法超出本题的API判断边界,也会引入不必要的系统风险。应先按软件调用层面排查,不把频率不变当作硬件故障或计数器停止的证据。
下一步建议按顺序做:先核对QueryPerformanceFrequency和QueryPerformanceCounter的调用返回,确认输出对象有效、单位正确;再在同一启动范围内取两次或多次计数值,比较计数差;若需要时间间隔,用对应计数差除以本次获取的频率。结果分支可以这样看:如果调用成功、计数差不为零,那么频率不变并不能说明计数器停止;如果计数差始终为零或调用失败,再检查参数、返回值和运行环境,仍不能只凭频率下结论。
海曙区台式电脑用户可拨400-877-9605,先整理同次启动下两种调用返回、频率与计数差。电脑快修网提供信息展示与第三方维修对接,具体地址、电脑侧检查是否支持及安排需当次核实,启用范围不代表即时履约。