C 高精度計時

2021-08-01 03:57:11 字數 1419 閱讀 8696

給定一段獲取**段效能的**:

#include #include large_integer larger_integer;

long long c1, c2;

double dff;

queryperformancefrequency(&larger_integer);//獲得時鐘頻率

dff = larger_integer.quadpart;

queryperformancecounter(&larger_integer);//查詢效能計數器,獲得初始值

c1 = larger_integer.quadpart;

function();//待獲取引數**段

queryperformancecounter(&larger_integer);//獲得終止值

c2 = larger_integer.quadpart;

double ntime = (c2 - c1) / dff;//獲得對應的時間值,時間單位是秒

cout << typeid(dff).name() << endl;

cout << typeid(c1).name() << endl;

cout << typeid(ntime).name() << endl;//double型別

關於其中的幾個函式,要求計算機從硬體上支援高精度定時器。

函式的原形是:

bool queryperformancefrequency(large_integer *lpfrequency);

bool queryperformancecounter (large_integer *lpcount);

queryperformancefrequency()

型別:win32api

原型:bool queryperformancefrequency(large_integer *lpfrequency);

作用:返回硬體支援的高精度計數器的頻率。

返回值:非零,硬體支援高精度計數器;零,硬體不支援,讀取失敗。

資料型別largeinteger既可以是乙個作為8位元組長的整數,也可以是作為兩個4位元組長的整數的聯合結構,其具體用法根據編譯器是否支援64位而定。該型別的定義如下:

typeef union _ large_integer

;longlong quadpart;

} large_integer;

在定時前應該先呼叫queryperformancefrequency()函式獲得機器內部計時器的時鐘頻率。接著在需要嚴格計時的事件發(e,g, function)生前和發生之後分別呼叫queryperformancecounter(),利用兩次獲得的計數之差和時鐘頻率,就可以計算出事件經歷的精確時間。

Windows Linux高精度計時器 C

linux windows 系統高精度計時器 ifndef lx timer h define lx timer h ifdef win32 include elif linux include endif class lxtimer endif include lxtimer.h ifdef wi...

api級高精度計時

c include include using namespace std int main int argc,char argv if queryperformancecounter ref start 計時 開始 int x for int i 0 i 1000000000 i 計時 結束 if...

關於高精度計時器

關於高精度計時器 一 毫秒級精度 1 net system.environment.tickcount 獲取系統啟動後經過的毫秒數,包裝了gettickcount 2 winapi gettickcount dllimport kernel32 static extern uint gettickc...