两个时间结构的 tv_sec 怎么可能相同但减去它们给我一个非零值
How is it possible that tv_sec of both timeval structures are the same but subtracting them gives me a non zero value
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
以上怎么可能?究竟是怎么回事?
%d
不是用于 long int
值 elaspsed_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);
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
以上怎么可能?究竟是怎么回事?
%d
不是用于 long int
值 elaspsed_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);