C : 为什么 gettimeofday() 的 startingTime 比 endingTime 大?

C : Why startingTime is larger than endingTime with gettimeofday()?

我想用 while 循环测量计算时间。

我正在用 C99 版本编程。

我的代码如下:

struct timeval startingTime,endingTime;
gettimeofday(&startingTime, NULL);
while(read(fd,&student,206) != 0){
    printf("%s\n",student);
}
gettimeofday(&endingTime, NULL);
long elapsed = endingTime.tv_usec-startingTime.tv_usec;
printf("Computing Time : %ld\n",elapsed);
printf("ending : %d , starting %d",endingTime.tv_usec,startingTime.tv_usec);

那么结果如下:

Computing Time : -76716

ending : 334481 , starting 411197

如你所见,起点大于终点...

我不能完全理解我错过了什么...

有没有人知道这种情况?

struct timeval实际上有两个成员,一个tv_sec成员和一个tv_usec成员。 tv_usec 是 usec 传递给 tv_sec 值的次数,以秒为单位(顾名思义)。

所以你必须先检查 tv_sec 差异,然后计算 tv_usec 差异(考虑到环绕)。

您当前所做的类似于在持续时间为几个小时时仅检查分钟差异。结束分钟数可能大于开始分钟数,因为小时数也可能增加。