GetTickCount 函式的作用和用法

2021-07-05 20:16:46 字數 1752 閱讀 3901

start:=gettickcount;   

...//執行耗時的操作

stop:=gettickcount;

timeused:=(stop-start)/1000; //使用了***秒

用來定時:  

void main() 

getchar();

return;

}

對於一般的實時控制,使用gettickcount()函式就可以滿足精度要求,但要進一步提高計時精度,就要採用 queryperformancefrequency()函式和queryperformancecounter()函式。這兩個函式是vc提供的僅供 windows   9x使用的高精度時間函式,並要求計算機從硬體上支援高精度計時器。

queryperformancefrequency()函式和queryperformancecounter()函式的原型為:   

bool   queryperformancefrequency(large—integer   *lpfrequency);   

bool   queryperformancecounter(large—integer   *lpcount);   

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

typedef union —large—integer   

;

longlong  quadpart;

// 8位元組整型數

}large—integer;

在進行計時之前,應該先呼叫queryperformancefrequency()函式獲得機器內部計時器的時鐘頻率。筆者在主頻為266、300、333的三種pentiumⅱ機器上使用該函式,得到的時鐘頻率都是1193180hz。接著,筆者在需要嚴格計時的事件發生之前和發生之後分別呼叫queryperformancecounter()函式,利用兩次獲得的計數之差和時鐘頻率,就可以計算出事件經歷的精確時間。以下程式是用來測試函式sleep(100)的精確持續時間。   

large—integer   litmp;   

longlong qpart1,qpart2;

double dfminus, dffreq, dftim;

queryperformancefrequency(&litmp);

// 獲得計數器的時鐘頻率

dffreq = (double)litmp.quadpart;

queryperformancecounter(&litmp);

// 獲得初始值

qpart1 = litmp.quadpart;

sleep(100) ;

queryperformancecounter(&litmp);

// 獲得終止值

qpart2 = litmp.quadpart;

dfminus = (double)(qpart2 - qpart1);

dftim = dfminus / dffreq;

// 獲得對應的時間值

GetTickCount 函式的陷阱!

開發中經經常使用gettickcount 函式來進行間隔時間的推斷。如推斷某一段 執行花了多少時間等,使用比較方便。可是僅僅針對尋常的一些測試。近期開發乙個服務程式時,也在 中用gettickcount 來進行推斷,大體格式例如以下 dword dwbegin 0 void thread run v...

GetTickCount 函式的作用和用法

csdn老帖 http topic.csdn.net t 20050107 12 3706743.html 1 一般用作定時相關的操作。gettickcount 返回開機以來經過的毫秒數 2 在要求誤差不大於1毫秒的情況下,可以採用gettickcount 函式,該函式的返回值是dword型,表示以...

規避GetTickCount越界問題

程式中經常性的需要獲取系統執行毫秒值來進行計算或者判斷。但是 gettickcount獲取的毫秒值可能在電腦連續執行二三十天以後產生越界現象。為了規避這種現象,使用獲取程式執行毫秒值來代替系統執行毫秒值 下面 是抄襲我 做個備忘。標頭檔案 ifndef get cpu time h define g...