Windows 什么';clock()、gettickcount()、QueryPerformanceCounter()和QueryPerformanceFrequency()之间的区别是什么?

Windows 什么';clock()、gettickcount()、QueryPerformanceCounter()和QueryPerformanceFrequency()之间的区别是什么?,windows,clock,Windows,Clock,它们都提供毫秒分辨率吗?时钟 一个C++函数。它返回自应用程序启动以来CPU滴答声的数量。若要将其转换为秒数,请将其除以每秒时钟数 GetTickCount Win32 API函数。返回自系统启动以来的毫秒数 查询性能计数器 Win32 API函数。性能计数器是一个高分辨率的计数器,随时间增加。要将其转换为秒,请将其除以QueryPerformanceFrequency否,它们没有毫秒精度时钟和GetTickCount在大多数系统上的精度在4到15毫秒之间QueryPerformanceCoun

它们都提供毫秒分辨率吗?

时钟

一个C++函数。它返回自应用程序启动以来CPU滴答声的数量。若要将其转换为秒数,请将其除以

每秒时钟数

GetTickCount

Win32 API函数。返回自系统启动以来的毫秒数

查询性能计数器


Win32 API函数。性能计数器是一个高分辨率的计数器,随时间增加。要将其转换为秒,请将其除以
QueryPerformanceFrequency

否,它们没有毫秒精度<代码>时钟和
GetTickCount
在大多数系统上的精度在4到15毫秒之间
QueryPerformanceCounter
的精度在微秒到纳秒之间

clock
GetTickCount
的包装器,如果您使用的是Microsoft的C运行时库,如果您使用的是MS编译器,则可能是
GetTickCount
以毫秒为单位返回一个值,但在经过一毫秒后,该值不会增加一毫秒。只有当系统时钟中断发生时,它才会增加,即每4到15毫秒一次-通常约为15毫秒,但应用程序可以更改它。这会影响整个计算机:它会影响线程调度,更频繁中断的开销也会减少实际运行程序代码所需的CPU时间,因此除非您真的需要,否则不要这样做。如果计算机的滴答声频率超过15毫秒,则其他应用程序已修改滴答声中断频率


QueryPerformanceCounter
使用系统上可用的任何高分辨率计时器。在过去,它通常基于处理器的内部时钟周期计数,因此在2-3GHz(约0.5ns)下计数。不幸的是,有些处理器在低功耗状态下会改变计数器的运行速度,而在多CPU系统(即多处理器插槽)中,如果CPU的速度不尽相同,则会出现问题。Windows现在使用其他更可靠的源,但它们的分辨率不如处理器
QueryPerformanceFrequency
告诉您一秒钟内发生多少次滴答声。要获得毫秒数,将QPC样本的差值乘以1000,然后除以
QueryPerformanceFrequency

的结果,文档说明了什么?