close
在程式內用到一秒以下的計時通常可用 GetTickCount(), GetTickCount()傳回系統開機後到呼叫時已經過的毫秒(milliseconds). 但是經實驗結果, GetTickCount()的時間精度是 15mS, 亦即15毫秒以下的部份會四捨五入後再傳出來.
另外 C Run Time Library 亦提供一個 clock()函式 (定義在time.h), 其同樣傳回統開機後到呼叫時已經過的clock 數(1/CLOCKS_PER_SEC 秒, 在time.h內, CLOCKS_PER_SEC=1000). clock()的精度也是15 mS. 也就是說 GetTickCount() 和 clock()其用法和傳回值其實是完全一樣.
若要使用精度較高的計時器, 可用QueryPerformanceFrequency() 與 QueryPerformanceCounter().
先看其宣告:
BOOL QueryPerformanceFrequency(
LARGE_INTEGER *lpFrequency // current frequency
);
BOOL QueryPerformanceCounter(
LARGE_INTEGER *lpPerformanceCount // counter value
);
QueryPerformanceFrequency取出系統高解析效能計數器之每秒振盪頻率,
QueryPerformanceCounter則取得開機後至目前之振盪周數. 注意其參數是64位元整數,運算時要
稍微注意.
例如,要計數某函式 myFunction()運算所花時間,可如下所示:
LARGE_INTEGER StartTime, EndTime;
ULONGLONG frequency;
QueryPerformanceFrequency((PLARGE_INTEGER)&frequency);
QueryPerformanceCounter(&StartTime);
myFunction();
QueryPerformanceCounter(&EndTime);
TRACE("運算 myFunction() 花費 %6.2f 毫秒.
",(double)((StartTime.QuadPart - EndTime.QuadPart)*1000)/(double)frequency);
全站熱搜