struct timeval結(jié)構(gòu)體在time.h中的定義為: struct timeval { time_t tv_sec; /* Seconds. */ suseconds_t tv_usec; /* Microseconds. */ }; 其中,tv_sec為Epoch到創(chuàng)建struct timeval時(shí)的秒數(shù),tv_usec為微秒
struct timeval結(jié)構(gòu)體在time.h中的定義為:
struct timeval
{
time_t tv_sec; /* Seconds. */
suseconds_t tv_usec; /* Microseconds. */
};
其中,tv_sec為Epoch到創(chuàng)建struct timeval時(shí)的秒數(shù),tv_usec為微秒數(shù),即秒后面的零頭。比如當(dāng)前我寫(xiě)博文時(shí)的tv_sec為1244770435,tv_usec為442388,即當(dāng)前時(shí)間距Epoch時(shí)間1244770435秒,442388微秒。需要注意的是,因?yàn)檠h(huán)過(guò)程,新建結(jié)構(gòu)體變量等過(guò)程需消耗部分時(shí)間,我們作下面的運(yùn)算時(shí)會(huì)得到如下結(jié)果:
int i;
for (i = 0; i < 4; ++i)
{
gettimeofday(&tv, NULL);
printf("%d\t%d\n", tv.tv_usec, tv.tv_sec);
sleep(1);
}
442388 1244770435
443119 1244770436
443543 1244770437
444153 1244770438
前面為微秒數(shù),后面為秒數(shù),可以看出,在這個(gè)簡(jiǎn)單運(yùn)算中,只能精確到小數(shù)點(diǎn)后面一到兩位,或者可以看出,每進(jìn)行一次循環(huán),均需花費(fèi)0.005秒的時(shí)間,用這個(gè)程序來(lái)作計(jì)時(shí)器顯然是不行的,除非精確計(jì)算產(chǎn)生的代碼消耗時(shí)間。
gettimeofday() -- 獲取當(dāng)前時(shí)間(保存在結(jié)構(gòu)體timeval中)
#include <stdio.h>
#include <sys/time.h>
#include <time.h>
int main(int argc, char * argv[]){
struct timeval tv; //(1)
while(1){
gettimeofday(&tv, NULL); //(2)
printf("time %u:%u\n", tv.tv_sec, tv.tv_usec);
sleep(2);
}
return 0;
}
(1) struct--timeval
--------------------------------------------------
struct timeval {
time_t tv_sec; /* seconds */
suseconds_t tv_usec; /* microseconds */
};
millisecond 毫秒
microsecond 微秒
timeval表示一個(gè)時(shí)間點(diǎn),比如:
timeval.tv_sec = 1 (s)
timevat.tv_usec = 500 000 (μs)
1:500 = 1s500000μs = 1.5s
(2) gettimeofday()
--------------------------------------------------
int gettimeofday(struct timeval *tv, struct timezone *tz);
The functions gettimeofday() and settimeofday() can get and set the time as well as a timezone.
The use of the timezone structure is obsolete; the tz argument should normally be specified as NULL.
(3) 運(yùn)行結(jié)果:
--------------------------------------------------
time 1181788367:991487
time 1181788369:991602
表示睡眠2秒經(jīng)過(guò)的精確時(shí)間為: 2s115μs