在软件设计中经常会用到关于时间的处理,用来计算语句、函数的执行时间,这时就需要精确到毫秒甚至是微妙的时间。
int gettimeofday(struct timeval *tv, struct timezone *tz);
int settimeofday(const struct timeval *tv , const struct timezone *tz);
struct timeval {
time_t tv_sec; /* seconds */
suseconds_t tv_usec; /* microseconds */
};
struct timezone {
int tz_minuteswest; /* minutes west of Greenwich */
int tz_dsttime; /* type of DST correction */
};
下面是个简单的例子,用来统计程序的执行时间:
…
struct timeval t_start,t_end;
long cost_time = 0;
//get start time
gettimeofday(&t_start, NULL);
printf("Start time: %ld us", t_start.tv_usec);
//some operation
…
//get end time
gettimeofday(&t_end, NULL);
printf("End time: %ld us", t_end.tv_usec);
//calculate time slot
cost_time = t_end.tv_usec - t_start.tv_usec;
printf("Cost time: %ld us", cost_time);
…
输出:
Start time: 438061 us
End time: 459867 us
Cost time: 21806 us
demo:
#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
int main(int argc, char *argv[])
{
printf("Hello, world!\n");
struct timeval tvafter,tvpre;
struct timezone tz;
int sum = 0;
int i=0;
gettimeofday (&tvpre , &tz);
for(i = 0; i < 100000000; i++)
{
sum += i;
}
gettimeofday (&tvafter , &tz);
printf("sum=%d 花费时间:%d\n",sum, (tvafter.tv_sec-tvpre.tv_sec)*1000+(tvafter.tv_usec-tvpre.tv_usec)/1000);
return EXIT_SUCCESS;
}