【问题标题】:how to calculate milliseconds using timeval structure?如何使用 timeval 结构计算毫秒?
【发布时间】:2013-09-10 02:21:39
【问题描述】:

我想从 timeval 类型的变量中检索以毫秒为单位的值。以下是我的尝试:

timeval* time;
long int millis = (time->tv_sec * 1000) + (time->tv_usec / 1000);
printf("Seconds : %ld, Millis : %ld", time->tv_sec, millis);

Output => Seconds : 1378441469, Millis : -243032358

问题是我得到的毫秒值是负数。这个 sn-ps 有什么问题?

【问题讨论】:

  • 你没有初始化time。还是您只是在示例中遗漏了什么?

标签: gcc timeval


【解决方案1】:

假设您正确初始化 time,这是因为将 time->tv_sec 乘以 1000 时溢出。在您的情况下,它已经是 14 亿,而您正在执行的有符号乘法最终溢出 21 亿或所以。使用 64 位乘法来解决它:

uint64_t millis = (time->tv_sec * (uint64_t)1000) + (time->tv_usec / 1000);

确保使用合理的格式打印出来。

【讨论】:

  • 你是对的。我理解它的溢出情况。但我不知道如何处理它。让我试试你的建议。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-15
  • 2017-06-19
  • 2023-02-21
  • 1970-01-01
  • 2014-02-26
  • 2012-02-19
  • 2010-12-26
相关资源
最近更新 更多