Windows QueryPerFunanceCounter返回的计数的时钟源是什么

Windows QueryPerFunanceCounter返回的计数的时钟源是什么,windows,timer,Windows,Timer,我的印象是QueryPerformanceCounter实际上正在访问为HPET(高性能事件计时器)提供数据的计数器——当然,区别在于HPET是一个计时器,当计数器值与所需间隔匹配时发送中断,而使计时器“超出”QueryPerformanceCounter您必须在软件中编写自己的循环 我之所以认为两者背后的硬件是相同的,唯一的原因是我在某处读到QueryPerformanceCounter正在访问芯片组上的计数器 声称QueryPerformanceCounter使用的芯片组计时器显然具有指定的

我的印象是QueryPerformanceCounter实际上正在访问为HPET(高性能事件计时器)提供数据的计数器——当然,区别在于HPET是一个计时器,当计数器值与所需间隔匹配时发送中断,而使计时器“超出”QueryPerformanceCounter您必须在软件中编写自己的循环

我之所以认为两者背后的硬件是相同的,唯一的原因是我在某处读到QueryPerformanceCounter正在访问芯片组上的计数器

声称QueryPerformanceCounter使用的芯片组计时器显然具有指定的时钟速率。但是,我可以验证QueryPerformanceFrequency在不同的机器上返回的数字是完全不同的,事实上,这个数字在不同的引导下可能会略有变化

返回的数字有时可能完全荒谬——这意味着滴答声在纳秒范围内。当然,当把它们放在一起时,一切都会起作用;也就是说,使用QueryPerformanceCounter/QueryPerformanceFrequency编写计时器软件可以获得正确的计时,并且延迟非常低

使用这些功能的软件定时器可能非常好。例如,如果间隔为1毫秒,超过30秒,很容易将近100%的滴答声落在预期间隔的10%之内。如果间隔为100微秒,您仍然可以获得较高的成功率(99.7%),但最差的滴答声可能远远超过(200微秒)


我想知道HPET后面的时钟是否相同。由于HPET是一个硬件计时器,所以它应该仍然可以提高精度,但到目前为止,我还不知道如何在Windows中访问它。

听起来微软已经让这些功能使用了“任何最好的计时器”:


听起来微软已经让这些函数使用了“任何最好的定时器”:


您是否尝试更新AMD多核系统的CPU驱动程序?你有没有检查过你的主板芯片组是否在“坏”名单上?您是否尝试设置CPU相关性

还可以使用基于RTC的时间函数和/或跳跃检测启发式来消除QPC的问题

这有一些提示:


请改进这个。这是一个社区wiki。

您是否尝试更新AMD多核系统的CPU驱动程序?你有没有检查过你的主板芯片组是否在“坏”名单上?您是否尝试设置CPU相关性

还可以使用基于RTC的时间函数和/或跳跃检测启发式来消除QPC的问题

这有一些提示:


请改进这个。这是一个社区wiki。

顺便说一句,我的测试都是在Windows XP(32位)下运行的顺便说一句,我的测试都是在Windows XP(32位)下运行的