【问题标题】:C : Why startingTime is larger than endingTime with gettimeofday()?C : 为什么使用 gettimeofday() 开始时间大于结束时间?
【发布时间】:2016-03-28 15:44:51
【问题描述】:

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

如你所见,开始大于结束...

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

有谁知道这种情况吗?

【问题讨论】:

    标签: c gettimeofday


    【解决方案1】:

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

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

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

    【讨论】:

    • 这句话是什么意思“tv_usec是通过tv_sec值的usec数”?
    • 您还可以计算一个微秒分辨率的时间戳,如 (long long)foo.tv_sec * 1000000 + (long long)foo.tv_usec. (This makes some assumptions about how time_t` 值,但在大多数当前系统上应该没问题。)跨度>
    • @LKM tv_usec 是 tv_sec 秒值之后的微秒数,与 10:30 相同,30 是 10 小时值之后的分钟数。它们不是使用不同单位的相同值的表示。这是否说明了区别?
    • @LaurentParenteau 是的,确实如此...谢谢您的帮助!
    猜你喜欢
    • 2018-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-23
    • 2017-11-04
    • 1970-01-01
    相关资源
    最近更新 更多