Linux C/C++獲取程序運行時間

獲取當前時間戳數據,程序中不同位置時間數據做差即可得到程序運行時間。

1 實現基礎:

 int gettimeofday(struct timeval *tv, struct timezone *tz);
1
2 通過在Linux 命令窗: 
Man gettimeofday; 
gettimeofday()會把目前的時間用tv 結構體返回,當地時區的信息則放到tz所指的結構中。

3 參數: 
struct timeval{ 
long tv_sec;/秒/ 時間戳秒(1970-01-01 00:00:00到現在經歷的秒數) 
long tv_usec;/微妙/ 
}; 
struct timezone{ 
int tz_minuteswest;/和greenwich 時間差了多少分鐘/ 
int tz_dsttime;/type of DST correction/ 
}

4 一般情況下 ,我們並不需要時區信息,所以第二個參數通常爲空。

struct timeval timeStart;
gettimeofday(&timeSystemStart, NULL );
1
2
這樣調用後 
timeStart.tv_sec 這個就是秒爲單位的時間戳。 
timeStart.tv_usec 這是當前秒中的毫秒數。

runTime  = timeStart.tv_sec + (double)(timeStart.tv_usec)/1000000;
1
runTime即爲當前以秒爲單位的時間戳數據(帶小數)。

5 sample code:

#include <sys/time.h>    
#include <unistd.h>   
#include <stdio.h>
int main(void){
    struct timeval timeStart, timeEnd, timeSystemStart; 
    double runTime=0, systemRunTime; 
    gettimeofday(&timeSystemStart, NULL );
    while(1){
        gettimeofday(&timeStart, NULL );
        usleep(300000);
        gettimeofday( &timeEnd, NULL ); 
        runTime = (timeEnd.tv_sec - timeStart.tv_sec ) + (double)(timeEnd.tv_usec -timeStart.tv_usec)/1000000;  
        systemRunTime = (timeEnd.tv_sec - timeSystemStart.tv_sec ) + (double)(timeEnd.tv_usec -timeSystemStart.tv_usec)/1000000;    
        printf("runTime is %lf\n", runTime);    
        printf("systemRunTime is %lf\n", systemRunTime);

    }
    return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
結果:

runTime is 0.300073
systemRunTime is 0.300214
runTime is 0.300062
systemRunTime is 0.600343
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章