【问题标题】:time(NULL) in c++ only counts seconds, not milliseconds [duplicate]c ++中的时间(NULL)只计算秒数,而不是毫秒[重复]
【发布时间】:2015-01-08 17:34:57
【问题描述】:

我不确定这是否属实,但在我的代码中,我打印了一个名为 currentTime 的变量的值,该变量记录了自应用程序运行以来的秒数。 currentTime 变量记录为 时间(NULL) - epocTime 其中 epocTime 在代码开始时设置为 time(NULL)。 即使 currentTime 是 double 类型,它也会在我的应用程序运行时打印为 1.0000、2.0000、3.0000 等等。然而,它从来没有一个非整数值。我是否可以更改记录时间的方式,以便也记录毫秒,例如是否有一个参数我可以给 time() 方法以使其记录毫秒。

【问题讨论】:

  • time() 给你整数。您分配什么并将该值转换为什么都没有关系。它不能神奇地获得微秒级的分辨率。

标签: c++ time


【解决方案1】:

time() 几乎总是返回一个整数类型,其中包含自 1970 年 1 月 1 日以来的秒数。time() 本身无法改变这一点。

相反,您应该查看std::chrono::steady_clock

#include <chrono>
#include <thread>
#include <iostream>

int main() {
    auto start = std::chrono::steady_clock::now();

    // Some work
    std::this_thread::sleep_for(std::chrono::seconds(1));

    auto end = std::chrono::steady_clock::now();
    auto elapsed = end - start;

    std::cout << std::chrono::duration_cast<std::chrono::milliseconds>(elapsed).count() << " milliseconds\n";
}

【讨论】:

  • “不多” 或者,事实上,什么都没有。还有your std::clock suggestion is simply wrong
  • @LightnessRacesinOrbit:我总是忘记哪个旧时钟返回挂钟时间或 CPU 时间,以及当您的进程切换进程时它们是否严重失败。所以让我们删除答案的那一部分。不过,感谢您提供的链接,这些天我可能会记住它。
猜你喜欢
  • 2010-12-26
  • 2013-05-05
  • 2021-12-25
  • 1970-01-01
  • 2022-01-07
  • 1970-01-01
  • 1970-01-01
  • 2023-02-21
  • 1970-01-01
相关资源
最近更新 更多