【问题描述】程序运行时间是编程的一项重要指标,在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
【代码清单】
#include <QDebug> #include <QTime> #include <sys/time.h> #include <windows.h> #include <math.h> void function(); int main(void) { qDebug()<<"-------------------------------"; //-1- QTime time; time.start(); function(); qDebug()<<time.elapsed()/1000.0<<"s"; //-2- 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"; //-3- double time_Start = (double)clock(); function(); double time_End = (double)clock(); qDebug()<<(time_End - time_Start)/1000.0<<"s"; //-4- 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"; return 0; } void function() { unsigned int i,j; double y; for(i=0;i<1000;i++) for(j=0;j<1000;j++) y=sin((double)i); }
转载请标明出处,仅供学习交流,勿用于商业目的
Copyright @ http://blog.csdn.net/tandesir