獲取當前時間戳數據,程序中不同位置時間數據做差即可得到程序運行時間。
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