【问题标题】:How is it possible that tv_sec of both timeval structures are the same but subtracting them gives me a non zero value两个 timeval 结构的 tv_sec 怎么可能相同但减去它们会给我一个非零值
【发布时间】:2021-11-08 01:53:51
【问题描述】:
timeval end_time;
timeval Dbg_timer;

上述时间结构在某些时候用gettimeofday() 初始化。

以下是我计算时差的方法:

long int elaspsed_time_s  = end_time.tv_sec - Dbg_timer.tv_sec;
printf("elaspsed_time_s =%d -> end_time_tv_sec=%d  Dbg_timer_tv_sec=%d \n", 
        elaspsed_time_s,       end_time.tv_sec,    Dbg_timer.tv_sec);

输出:

elaspsed_time_s =3 -> end_time_tv_sec=1631446699  Dbg_timer_tv_sec=1631446699

以上怎么可能?到底发生了什么?

【问题讨论】:

  • long int %d
  • 我看到 @KamilCuk 好的,让我尝试使用正确的转换进行打印,非常感谢。
  • 感谢@KamilCuk,事实证明我使用了错误的参数进行打印,就像你说的那样。

标签: c++ c difftime timeval


【解决方案1】:

%d 不是用于long intelaspsed_time_s 的正确转换。 (顺便说一句,正确的拼写是“elapsed”。)使用%ld 代替elaspsed_time_s

%d 也不是用于 tv_sec 成员中的 time_t 值的正确转换。在 POSIX 系统上,time_t 是整数类型,但据我所知,它不一定是 int。要打印time_t 值,您可以将其转换为long int 并使用%ld 打印:

printf("elaspsed_time_s =%ld -> end_time_tv_sec=%ld  Dbg_timer_tv_sec=%ld \n", 
        elaspsed_time_s,
        (long int) end_time.tv_sec,
        (long int) Dbg_timer.tv_sec);

或者,您可以包含<stdint.h><inttypes.h> 并通过uintmax_t 打印:

printf("elaspsed_time_s =%ld -> end_time_tv_sec=%" PRIuMAX "  Dbg_timer_tv_sec=%" PRIuMAX " \n", 
        elaspsed_time_s,
        (uintmax_t) end_time.tv_sec,
        (uintmax_t) Dbg_timer.tv_sec);

【讨论】:

  • 感谢@Eric Postpischil,以上解决了 printf 只是打印数字的低位但当我使用正确的 printf 转换时,我发现两个数字不一样。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-12
  • 2014-12-04
  • 1970-01-01
  • 2023-01-22
  • 2016-06-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多