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
差异(考虑到环绕)。
您当前所做的类似于在持续时间为几个小时时仅检查分钟差异。结束分钟数可能大于开始分钟数,因为小时数也可能增加。
我想用 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
差异(考虑到环绕)。
您当前所做的类似于在持续时间为几个小时时仅检查分钟差异。结束分钟数可能大于开始分钟数,因为小时数也可能增加。