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...