struct timeval start, end;
start.tv_usec = 0;
end.tv_usec = 0;
gettimeofday(&start, NULL);
functionA();
gettimeofday(&end, NULL);
long t = end.tv_usec - start.tv_usec;
printf("Total elapsed time %ld us \n", t);
我正在计算这样的总经过时间,但它有时显示负值。 可能是什么原因造成的?
提前致谢。
答案 0 :(得分:4)
请记住,该结构有秒和微秒字段。因此,如果您只是减去微秒字段,则可能会有一个稍后的秒数,但微秒字段会更少。例如,结束时间为5秒,与使用减法方法的4秒和5000微秒相比,100微秒将产生负结果。为了获得正确的结果,您必须考虑结构的秒和微秒字段。这可以通过以下方式完成:
long seconds = end.tv_sec - start.tv_sec;
long micro_seconds = end.tv_usec - start.tv_usec;
if (micro_seconds < 0)
{
seconds -= 1;
}
long total_micro_seconds = (seconds * 1000000) + abs(micro_seconds);
答案 1 :(得分:2)
可能有以下几点:
long t = (end.tv_sec*1e6 + end.tv_usec) - (start.tv_sec*1e6 + start.tv_usec);
答案 2 :(得分:0)
数据类型: struct timeval
struct timeval
结构代表经过的时间。它在sys/time.h
中声明,并具有以下成员:
long int tv_sec
这表示经过时间的整秒数。
long int tv_usec
这是剩余的经过时间(几分之一秒),表示为微秒数。它总是不到一百万。
您唯一减去的是tv_usec
中的微秒,超过tv_sec
中的完整秒值。您需要使用这两个值才能找到两次之间的精确微秒差异。