1. 程式人生 > >c/c++ 高精度時間測試

c/c++ 高精度時間測試

  • 測量程式執行時間(ms級)

高精度時控函式QueryPerformanceFrequency(),QueryPerformanceCounter()

原理:QueryPerformanceCounter()這個函式返回高精確度效能計數器的值,它可以以微妙為單位計時.但是QueryPerformanceCounter()確切的精確計時的最小單位是與系統有關的,所以,必須要查詢系統以得到QueryPerformanceCounter()返回的嘀噠聲的頻率.QueryPerformanceFrequency()提供了這個頻率值,返回每秒嘀噠聲的個數. 計算確切的時間是從第一次呼叫QueryPerformanceCounter()開始的假設得到的LARGE_INTEGER為nStartCounter,過一段時間後再次呼叫該函式結束的,設得到nStopCounter.兩者之差除以QueryPerformanceFrequency()的頻率就是開始到結束之間的秒數.由於計時函式本身要耗費很少的時間,要減去一個很少的時間開銷.但一般都把這個開銷忽略。

e.g:

#include <stdio.h>
#include <windows.h>

/*count time*/
int main()
{

    double time=0;
    double counts=0;
    LARGE_INTEGER nFreq;
    LARGE_INTEGER nBeginTime;
    LARGE_INTEGER nEndTime;
    QueryPerformanceFrequency(&nFreq);
    QueryPerformanceCounter(&nBeginTime);//開始計時
        //...測試程式碼
         printf("Hello world!\n");
//          printf("Hello world!\n");
//           printf("Hello world!\n");
//            printf("Hello world!\n");
//            printf("Hello world!\n");
//            printf("Hello world!\n");
    QueryPerformanceCounter(&nEndTime);//停止計時
    time=(double)(nEndTime.QuadPart-nBeginTime.QuadPart)/(double)nFreq.QuadPart;//計算程式執行時間單位為s
    //cout<<"執行時間:"<<time*1000<<"ms"<<endl;
    printf("spend time is : %f ms\n",(time *1000));

    return 0;
}