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);


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 free6d1823 的頭像
    free6d1823

    Free Software

    free6d1823 發表在 痞客邦 留言(1) 人氣()