【问题标题】:What conditions can cause clock() to return -1 (ie fail)?什么情况会导致clock() 返回-1(即失败)?
【发布时间】:2011-11-02 22:24:52
【问题描述】:

我正在使用 time.h 中的 clock() 来为我希望每秒执行一次的操作提供粗略的经过时间的机制。 (我可能想使用 time() 但大多数问题都存在,因为 time() 在失败时也返回 -1)。精确并不重要,因为其他阈值足够高,即使达到半秒也可以。

函数在失败时返回 -1,目前如果我检测到失败,我会在下一秒重试时钟最多 100 次。

除了某种物理硬件故障之外,还有哪些原因会导致clock() 或time() 失败?如果重试后仍然是-1,我是否可以假设系统存在“更大的问题”(因此我可能想优雅地退出)?

【问题讨论】:

  • 这是一个长镜头,但errno 的值在clock 返回-1 之后是否包含任何有用的信息?
  • 操作系统中的错误?库中实现围绕操作系统包装的错误?在实时系统的情况下,无法在配置的时间内完成请求。缺少将 OS 中配置的时钟用于 clock() 的功能。对于失败的操作系统,对时钟()的后续调用过多。我想我可以想出一些深奥的。你真正的问题是你是否需要真正关心它是否失败?
  • @PlasmaHH 如果您将其转换为答案,我至少可以投票。

标签: c++ time clock


【解决方案1】:

从内核模式应用程序调用函数也会导致它失败,这是我所担心的。

【讨论】:

    【解决方案2】:

    我的friendly man page 声明如下:

    如果使用的处理器时间不可用或其值不能 表示,函数应返回值 (clock_t)-1

    请注意,clock() 返回一个基于 CPU 时间使用率的值(在除 Windows 之外的所有设备上),如果您想要挂钟时间,请改用 time()

    【讨论】:

    • 根据系统的不同,cannot be represented 子句可能不适用。例如,在 32 位 Linux 上,clock_t 环绕。请注意,如果您在正确的时刻调用它,原则上返回的值可能恰好是 (clock_t)-1,尽管我认为这实际上不会在 Linux 上发生。
    【解决方案3】:

    来自man clock(3)

    如果使用的处理器时间不可用或其值不能 表示,函数返回值(clock_t)-1

    听起来像一个符合标准的实现可以直接返回并完成它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多