返回值:非零,硬件支持高精度计数器;零,硬件不支持,读取失败。
QueryPerformanceFrequency() -技术特点
函数的原形是:
BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency);
BOOL QueryPerformanceCounter (LARGE_INTEGER *lpCount);
typeef union _ LARGE_INTEGER
{
struct
{
DWORD LowPart;
LONG HighPart;
};
LONGLONG QuadPart;
} LARGE_INTEGER;
在定时前应该先调用QueryPerformanceFrequency()函数获得机器内部计时器的时钟频率。接着在需要严格计时的事件发生前和发生之后分别调用QueryPerformanceCounter(),,利用两次获得的计数之差和时钟频率,就可以计算出事件经历的精确时间。
测试Sleep的精确时间:
#include<stdio.h>
#include<windows.h>
voidmain()
{
LARGE_INTEGERnFreq;
LARGE_INTEGERnBeginTime;
LARGE_INTEGERnEndTime;
doubletime;
QueryPerformanceFrequency(&nFreq);
QueryPerformanceCounter(&nBeginTime);
Sleep(1000);
QueryPerformanceCounter(&nEndTime);
time=(double)(nEndTime.QuadPart-nBeginTime.QuadPart)/(double)nFreq.QuadPart;
printf("%f\n",time);
Sleep(1000);
system("Pause");
}
结果为
0.999982
1.000088
1.000200
等,所以Sleep的精度还是比较低的。
版权声明:本文为博主原创文章,未经博主允许不得转载。
天上永远不会掉馅饼,不要因为贪图一时的快乐而付出惨痛的代价,