Qt测试计算时间
阅读原文时间:2023年07月14日阅读:1

博客转载自:https://blog.csdn.net/lg1259156776/article/details/52325508

一、标准C和C++都可用

1. 获取时间用time_t time( time_t * timer ),计算时间差使用double difftime( time_t timer1, time_t timer0 )。 精确到秒

#include
#include
int main()
{
time_t start ,end ;
double cost;
time(&start);
sleep(1);
time(&end);
cost=difftime(end,start);
printf("%f/n",cost);
return 0;
}

关于代码中的sleep函数,需要注意的是:

1)在windows下,为Sleep函数,且包含windows.h

2)关于sleep中的数,在Windows和Linux下1000代表的含义并不相同,Windows下的表示1000毫秒,也就是1秒钟;Linux下表示1000秒,Linux下使用毫秒级别的函数可以使用usleep。

2、clock_t clock(),clock函数获取的是计算机启动后的时间间隔,得到的是CPU时间,精确到1/CLOCKS_PER_SEC秒。

#include
#include
int main()
{
double start,end,cost;
start=clock();
sleep(1);
end=clock();
cost=end-start;
printf("%f/n",cost);
return 0;
}

注意与CPU振荡周期有关,所以不同CPU精度可能不一样。

3. 利用QTime,其精度为ms级

#include
#include

QTime time;

time.start();
function();

qDebug()<<time.elapsed()/1000.0<<"s";

4.  Linux利用clock(),其精度为ms级

#include
#include

double time_Start = (double)clock();
function();
double time_End = (double)clock();

qDebug()<<(time_End - time_Start)/1000.0<<"s";

3. 利用windows.h函数,提精度为us级

#include
#include

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

4. 利用gettimeofday(),其精度为us级

#include
#include

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