Qt測算程序運行時間

【問題描述】程序運行時間是編程的一項重要指標,在QT中如何測算程序的運行時間呢?

測試函數:

#include <math.h>  
  
void function()  
{  
    unsigned int i,j;  
    double y;  
  
    for(i=0;i<1000;i++)  
        for(j=0;j<1000;j++)  
            y=sin((double)i);  
}  

方法1 利用QTime,其精度爲ms級

#include <QDebug>  
#include <QTime>  
  
QTime time;  
  
time.start();  
function();  
  
qDebug()<<time.elapsed()/1000.0<<"s";  

運行結果:0.109 s

方法2 利用gettimeofday(),其精度爲us級

#include <QDebug>  
#include <sys/time.h>  
  
struct timeval tpstart,tpend;  
float timeuse;  
  
gettimeofday(&tpstart,NULL);  
function();  
gettimeofday(&tpend,NULL);  
timeuse=(1000000*(tpend.tv_sec-tpstart.tv_sec) + tpend.tv_usec-tpstart.tv_usec)/1000000.0;  
  
qDebug()<<timeuse<<"s";  

運行結果:0.109375 s

方法3 利用clock(),其精度爲ms級

#include <QDebug>  
#include <sys/time.h>  
  
double time_Start = (double)clock();  
function();  
double time_End = (double)clock();  
      
qDebug()<<(time_End - time_Start)/1000.0<<"s";  

運行結果:0.11 s

方法4 利用windows.h(VC)函數,提精度爲us級

#include <QDebug>  
#include <windows.h>  
  
LARGE_INTEGER litmp;  
LONGLONG Qpart1,Qpart2,Useingtime;  
double dfMinus,dfFreq,dfTime;  
  
//獲得CPU計時器的時鐘頻率  
QueryPerformanceFrequency(&litmp);//取得高精度運行計數器的頻率f,單位是每秒多少次(n/s),  
dfFreq = (double)litmp.QuadPart;  
  
QueryPerformanceCounter(&litmp);//取得高精度運行計數器的數值  
Qpart1 = litmp.QuadPart; //開始計時  
  
function(); //待測試的計算函數等  
  
QueryPerformanceCounter(&litmp);//取得高精度運行計數器的數值  
Qpart2 = litmp.QuadPart; //終止計時  
  
dfMinus = (double)(Qpart2 - Qpart1);//計算計數器值  
dfTime = dfMinus / dfFreq;//獲得對應時間,單位爲秒,可以乘1000000精確到微秒級(us)  
Useingtime = dfTime*1000000;  
  
qDebug()<<dfTime<<"s";  

運行結果:0.107415 s

發佈了43 篇原創文章 · 獲贊 27 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章