我想用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
正如你所见,开始比结束更重要。。。
我不能完全理解我错过了什么。。。
有人知道这种情况吗?

最佳答案

struct timeval实际上有两个成员,一个tv_sec成员和一个tv_usec成员。tv_usectv_sec值的usec传递数,以秒为单位(顾名思义)。
因此,您必须首先检查tv_sec差异,然后计算tv_usec差异(考虑到环绕)。
你目前所做的工作类似于只检查持续时间为几个小时时的分钟差异。结束的分钟数可能比开始的分钟数大,因为小时数也可以增加。

关于c - C:为什么使用gettimeofday(),startingTime大于endingTime?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36265733/

10-10 17:54