1

我想用 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

如您所见,开始比结束更大...

我无法完全理解我错过了什么......

有没有人知道这种情况?

4

1 回答 1

4

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

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

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

于 2016-03-28T15:49:59.930 回答