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