clock(),gettickcount(),QueryPerformanceCounter()和QueryPerformanceFrequency()之间有什么区别?

时间:2009-10-13 12:19:12

标签: windows clock

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

2 个答案:

答案 0 :(得分:8)

不,它们没有毫秒精度。 clockGetTickCount在大多数系统上的精度为4到15毫秒。 QueryPerformanceCounter的精度在微秒到纳秒范围内。

如果您正在使用Microsoft的C运行时库,那么

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

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

答案 1 :(得分:3)

<强> clock

C ++函数。它返回自应用程序启动以来 CPU ticks 的数量。要将其转换为秒,请将其除以CLOCKS_PER_SEC

<强> GetTickCount

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

<强> QueryPerformanceCounter

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