2024年1月31日发(作者:)
C++記錄精確時間-QueryPerformanceFrequency()
精確獲取時間
QueryPerformanceFrequency() - 基本介紹
類型:Win32API
原型:BOOL QueryPerformanceFrequency (LARGE_INTEGER *lpFrequency);
作用:返回硬體支援的高精度計數器的頻率。
返回值:非零,硬體支援高精度計數器;零,硬體不支援,讀取失敗。
QueryPerformanceFrequency() - 技術特點
供WIN9X使用的高精度計時器:QueryPerformanceFrequency()和QueryPerformanceCounter(),要求電腦從硬體上支援高精度計時器。需包含windows.h標頭檔。
函數的原形是:
BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency);
BOOL QueryPerformanceCounter (LARGE_INTEGER *lpCount);
資料類型LARGEINTEGER既可以是一個作為8位元組長的整數,也可以是作為兩個4位元組長的整數的聯合結構, 其具體用法根據編譯器是否支援64位元而定。該類型的定義如下:
typeef union _ LARGE_INTEGER
{
struct
{
DWORD LowPart;
LONG HighPart;
};
LONGLONG QuadPart;
} LARGE_INTEGER;
在定時前應該先調用QueryPerformanceFrequency()函數獲得機器內部計時器的時鐘頻率。接著在需要嚴格計時的事件發生前和發生之後分別調用QueryPerformanceCounter(),利用兩次獲得的計數之差和時鐘頻率,就可以計算出事件經歷的精確時間。
1 / 2
C++記錄精確時間-QueryPerformanceFrequency()
測試Sleep的精確時間:
#include
#include
void main()
{
LARGE_INTEGER nFreq;
LARGE_INTEGER nBeginTime;
LARGE_INTEGER nEndTime;
double time;
QueryPerformanceFrequency (&nFreq);
QueryPerformanceCounter (&nBeginTime);
Sleep(1000);
QueryPerformanceCounter(&nEndTime);
Time = (double) (rt)/(double)rt;
printf("%fn", time);
Sleep(1000);
system("Pause");
}
結果為
0.999982
1.000088
1.000200
單位為秒,乘1000000即為微秒
2 / 2
发布评论