C语言QueryPerformanceFrequency和QueryPerformanceCounter的用法
类型:Win32API
原型:BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency);
BOOL QueryPerformanceCounter (LARGE_INTEGER *lpCount);
作用:返回硬件支持的高精度计数器的频率。
返回值:非零,硬件支持高精度计数器;零,硬件不支持,读取失败。
注意:需包含windows.h头文件。
用法:在定时前应该先调用QueryPerformanceFrequency()函数获得机器内部计时器的时钟频率。接着在需要严格计时的事件发生前和发生之后分别调用QueryPerformanceCounter(),利用两次获得的计数之差和时钟频率,就可以计算出事件经历的精确时间。
例子:
测试Sleep的精确时间:
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <stdlib.h>
#include <windows.h>
int main(){
LARGE_INTEGER ntime;
LARGE_INTEGER begintime;
LARGE_INTEGER endtime;
double time;
QueryPerformanceFrequency(&ntime);
QueryPerformanceCounter(&begintime);
sleep(1);
QueryPerformanceCounter(&endtime);
time=(double)(endtime.QuadPart-begintime.QuadPart)/(double)ntime.QuadPart;
printf("%f\n",time);
sleep(1);
system("Pause");
return 0;
}
LARGE_INTEGER ntime;
LARGE_INTEGER begintime;
LARGE_INTEGER endtime;
double time;
QueryPerformanceFrequency(&ntime);
QueryPerformanceCounter(&begintime);
sleep(1);
QueryPerformanceCounter(&endtime);
time=(double)(endtime.QuadPart-begintime.QuadPart)/(double)ntime.QuadPart;
printf("%f\n",time);
sleep(1);
system("Pause");
return 0;
}
结果1.000611
所以Sleep的精度还是比较低的。