C++使用time.h庫計算持續時間
一、使用click函式,精確到毫秒(推薦使用這種)
計算演算法程式的執行時間,使用clock()函式,返回值是長整型long
函式原型為: clock_t clock(void);
其中clock_t的定義為:typedef long clock_t;說明 clock_t就是長整型
實際上這個函式返回的不是時間,這個函式只是一個計數器,時間每過千分之一秒(就是毫秒)就加1(這個定義在time.h中)
#define CLOCKS_PER_SEC 1000
這個數值不能增加,因為在標準C/C++中,最小的計時單位就是一毫秒。
#include <stdio.h> #include <time.h> using namespace std; void myTime() { clock_t start = clock(); cout<<"開始時間:"<<start<<endl; long i=100000000; while(i--); clock_t end = clock(); cout<<"結束時間:"<<end<<endl; cout<<"演算法執行持續時間:"<<end-start<<"毫秒"<<endl; } void main(){ myTime(); }
二、使用time和difftime函式,精確到秒
time方法–獲取當前時間戳
time方法用於獲取日曆時間,所謂的日曆時間是指從一個時間點(例如:1970年1月1日0時0分0秒)到現在此時的秒數)到現在的秒數,其實就是個相對時間,也是當前的時間戳(到秒),跟一般的時間戳轉換工具(如站長工具)的值相同
time_t time(time_t * timer);
time_t實際就是個long(32位長整形)或者__int64(VC中的擴充套件64位整形)或者long long(g++編譯器中的擴充套件64位整形)
如下time_t的定義是在win32的環境下的定義:
typedef _W64 long __time32_t;
typedef __time32_t time_t;
在其他環境可能不同。
time_t * timer其實就是出參引數,函式返回值跟timer的值都是一樣,都是當前的日曆時間,
如果傳入NULL或者0,則該函式返回值的就是當前的時間戳。
time_t timer=12345678; time_t nowtime=time(&timer); cout<<timer<<endl; cout<<nowtime<<endl; cout<<time(0)<<endl; cout<<time(NULL)<<endl; cout<<time(nullptr)<<endl;
輸出:
1540199258
1540199258
1540199258
1540199258
1540199258
difftime方法–比較兩個時間戳之間的間隔
該函式返回的以秒計算的時間間隔是double型別的,但這並不說明該時間具有同double一樣的精確度,這是由它的引數決定的(time_t是以秒為單位計算的)
double difftime(time_t _Time1, time_t _Time2)
計算持續時間:
#include <stdio.h>
#include <time.h>
using namespace std;
void myTime() {
time_t start = time(NULL);
cout<<"開始時間:"<<start<<endl;
long i = 100000000;
while(i--) ;
time_t end = time(NULL);
cout<<"結束時間:"<<end<<endl;
cout<<"演算法執行持續時間:"<<difftime(end,start)<<"秒"<<endl;
}
void main(){
myTime();
}