c/c++ 高精度時間測試
阿新 • • 發佈:2019-01-10
- 測量程式執行時間(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; }