本文转自于:http://www.cnblogs.com/flyinggod/p/8721291.html
一、标准C和C++都可用
1. 获取时间用time_t time( time_t * timer ),计算时间差使用double difftime( time_t timer1, time_t timer0 )。 精确到秒
1 2 3 4 5 6 7 8 9 10 11 12 13 | #include <time.h> #include <stdio.h> 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秒。
1 2 3 4 5 6 7 8 9 10 11 12 | #include <time.h> #include <stdio.h> 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级
1 2 3 4 5 6 7 8 9 | #include <QDebug> #include <QTime> QTime time ; time .start(); function(); qDebug()<< time .elapsed()/1000.0<< "s" ; |
4. Linux利用clock(),其精度为ms级
1 2 3 4 5 6 7 8 | #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" ; |
5. 利用windows.h函数,提精度为us级
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #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" ; |
6. 利用gettimeofday(),其精度为us级
1 2 3 4 5 6 7 8 9 10 11 12 | #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" ; |