1. 程式人生 > >C++使用time.h庫計算持續時間

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();
}