GetTickCount 函式的作用和用法

2021-05-08 19:40:23 字數 1936 閱讀 5757

[**csdn老帖]:http://topic.csdn.net/t/20050107/12/3706743.html

1、一般用作定時相關的操作。gettickcount()   返回開機以來經過的毫秒數

2、在要求誤差不大於1毫秒的情況下,可以採用gettickcount()函式,該函式的返回值是dword型,表示以毫秒為單位的計算機啟動後經歷的時間間隔。使用下面的程式設計語句,可以實現50毫秒的精確定時,其誤差小於1毫秒。    

dword   dwstart,   dwstop;    

//   起始值和終止值    

dwstop   =   gettickcount();    

while(true)    

while(dwstop   -   50   <   dwstart);    

}     

3、對於一般的實時控制,使用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 函式的作用和用法

start gettickcount 執行耗時的操作 stop gettickcount timeused stop start 1000 使用了 秒 用來定時 void main getchar return 對於一般的實時控制,使用gettickcount 函式就可以滿足精度要求,但要進一步提高...

規避GetTickCount越界問題

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