QueryPerformanceFrequency高精度计时

利用这两个函数可以创建跟硬件时钟的晶振一样精确的计时器。

在进行定时之前,先调用QueryPerformanceFrequency()函数获得机器内部定时器的时钟频率, 然后在需要严格定时的事件发生之前和发生之后分别调用QueryPerformanceCounter()函数,利用两次获得的计数之差及时钟频率,计算出事件经 历的精确时间。



1.如下函数查询cpu时钟频率,(如我的cpu是2.89GHz,得到2893460000)
BOOL QueryPerformanceFrequency( LARGE_INTEGER *lpFrequency   // current frequency);

2.再获取高精确度性能计数器的值
BOOL QueryPerformanceCounter(  LARGE_INTEGER *lpPerformanceCount   // counter value);
计数器的值除以频率得到当前系统运行时间(秒):
LARGE_INTEGER  startTime = (*lpPerformanceCount) /(*lpFrequency )

3.运行所需计时的代码段后再次获取性能计数器的值
BOOL QueryPerformanceCounter(  LARGE_INTEGER *lpPerformanceCount2   // counter value);
计数器的值除以频率得到当前系统运行时间(秒):
LARGE_INTEGER endTime =(*lpPerformanceCount2) /(*lpFrequency )

4.endTime-startTime即为两次调用QueryPerformanceCounter期间的精度计时时间。
这结果是秒级的,如果要更精确的可以将时钟频率除以相应值再作后面计算。
如要获得毫秒级的:LARGE_INTEGER  tick=*lpFrequency/1000
LARGE_INTEGER  startTime = (*lpPerformanceCount) /tick
LARGE_INTEGER endTime =(*lpPerformanceCount2) /tick
endTime-startTime

你可能感兴趣的:(高精度计时)