【问题标题】:Why does gettimeofday return weird tv_sec?为什么 gettimeofday 返回奇怪的 tv_sec?
【发布时间】:2015-05-12 14:57:22
【问题描述】:

我有一个应用程序调用gettimeofday 来存储该部分代码开始运行的 tv_sec。这段代码很简单:

struct timeval tvnow;
gettimeofday(&tvnow);
int initialTime = tvnow.tv_sec;

它通常工作正常,但有时我会得到意想不到的结果,例如

tvnow = {tv_sec = 1024, tv_usec = 0}
initialTime = 1401591

或者

tvnow = {tv_sec = 1024, tv_usec = 0}
initialTime = 2439903

为什么会发生这种情况?

问候

【问题讨论】:

  • 如果您将 int initialTime 更改为 time_t initialTime 会发生什么?我的猜测是您使用的是 64 位计算机,并且它正在溢出 int。
  • 发布您如何确定initialTime 的值为1401591

标签: c gettimeofday


【解决方案1】:

您使用错误数量的参数调用gettimeofday()。产生的行为是未定义的。如果您不想要时区信息,则将NULL 作为第二个参数传递:

struct timeval tvnow;
gettimeofday(&tvnow, NULL);
int initialTime = tvnow.tv_sec;

我将假设您以某种方式包含了包含struct timeval 定义的标题组合(或者您提供了自己的定义),但不是gettimeofday() 的原型。如果在函数调用点有一个正确的原型可见,那么代码根本不应该编译。如果您的编译器没有发出关于缺少原型的警告,那么您应该弄清楚如何让它这样做(并且始终以这种方式编译),或者获得更好的编译器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-28
    • 2016-09-02
    相关资源
    最近更新 更多