使用time(NULL)得到的是从1970年1月1日到目前的秒,这种精度很多时候是不够用的。为了得到毫秒级的精度,需要使用gettimeofday:

直接上代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <sys/time.h>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>

// Return 1 if the difference is negative, otherwise 0.
int timeval_subtract(struct timeval *result, struct timeval *t2, struct timeval *t1)
{

long int diff = (t2->tv_usec + 1000000 * t2->tv_sec) - (t1->tv_usec + 1000000 * t1->tv_sec);
result->tv_sec = diff / 1000000;
result->tv_usec = diff % 1000000;

return (diff<0);
}

void timeval_print(struct timeval *tv)
{

char buffer[30];
time_t curtime;

printf("%ld.%06ld", tv->tv_sec, tv->tv_usec);
curtime = tv->tv_sec;
strftime(buffer, 30, "%m-%d-%Y %T", localtime(&curtime));
printf(" = %s.%06ld\n", buffer, tv->tv_usec);
}

int main()
{

struct timeval tvBegin, tvEnd, tvDiff;

// begin
gettimeofday(&tvBegin, NULL);
timeval_print(&tvBegin);

// lengthy operation
int i,j;
for(i=0;i<999999L;++i) {
j=sqrt(i);
}

//end
gettimeofday(&tvEnd, NULL);
timeval_print(&tvEnd);

// diff
timeval_subtract(&tvDiff, &tvEnd, &tvBegin);
printf("%ld.%06ld\n", tvDiff.tv_sec, tvDiff.tv_usec);

return 0;
}
知识共享授权条款
本著作Chen, Zai-Chun制作,以知识共享 姓名标示-相同方式分享 4.0 国际 授权条款释出

留言

May 14 2012