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

时间:2016-03-28 15:44:51

标签: c 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);

然后结果如下:

  

计算时间:-76716

     

结尾:334481,从411197开始

如你所见,开始比结束更重要......

我无法完全理解我所缺少的东西......

有谁知道这种情况?

1 个答案:

答案 0 :(得分:4)

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

因此,您必须首先检查tv_sec差异,然后计算tv_usec差异(考虑环绕)。

您目前正在做的事情类似于只检查持续时间为几小时的分钟差异。结束时间可能比开始分钟更长,因为小时也可以增加。