【问题标题】:Getting same value for timestamp on consequent calls在后续调用中获取相同的时间戳值
【发布时间】:2016-11-01 16:37:15
【问题描述】:

每当我调用这个可能是 30 次/秒的函数时,我都试图让 unix 时间戳达到毫秒级。下面的函数返回的时间戳总是相同的,但是当我将它打印到std::cerr 时,我得到不同的值。每次调用函数时我都会创建变量,所以我不确定我在这里做错了什么。任何帮助将不胜感激。

    float GetUnixTimestamps()
    {
        float milliseconds_since_epoch =
        std::chrono::duration_cast<std::chrono::milliseconds>
        (std::chrono::system_clock::now().time_since_epoch()).count();

    std::cerr << milliseconds_since_epoch << std::endl;
    return milliseconds_since_epoch;
    }

编辑:根据建议 我正在使用 C++ 11,需要在 Windows x64、x86 和 Linux(主要是 Ubuntu 和 CentOS)上编译它。我想在unix中获取当前时间。我已经阅读了 S.O 帖子 1955512116177295 但时间戳的值仍然保持不变。

【问题讨论】:

  • 听起来像是编译器优化。您需要发布minimal reproducible example,并说明您正在使用哪个编译器和哪些编译标志
  • 定义“总是一样的”。
  • 例如,第一次调用我得到 1478019383296,第二次调用相同的函数我仍然得到相同的值,即 1478019383296。转换星期二,2016 年 11 月 1 日 16:56:23.296 GMT,因为时间是以毫秒为单位,我希望看到基于下一次调用的值发生变化。
  • @UmangMukeshMehta:尝试在每次调用std::this_thread::sleep_for(std::chrono::milliseconds(33)); 结束时放置GetUnixTimestamps...你仍然得到相同的输出吗?
  • 致那些投票结束这个问题的人:您能否在给 OP 时间澄清问题之前停止结束问题?这不仅会激怒提出问题的人,也会激怒那些试图帮助他的人。

标签: c++ chrono


【解决方案1】:

float 的精度不够好,无法在这里做你想做的事。自 1970-01-01 以来的当前毫秒数约为 1,478,020,169,728。在此之后,float 中的下一个可表示值是 1,478,020,300,800。那是大约 131 秒(2 分钟)之后。

double 会在这里做。

【讨论】:

  • 哈哈,看准了!在我自己的测试中,我下意识地将 OPs float 转换为 double
  • 嗯,你 &lt;chrono&gt;(当然还有很多其他的东西)。确实是相当权威的回应。 +1
  • 感谢@Howard 从 float 更改为 double 解决了我的问题。
猜你喜欢
  • 1970-01-01
  • 2021-12-04
  • 2020-09-20
  • 1970-01-01
  • 1970-01-01
  • 2016-06-15
  • 2022-12-06
  • 1970-01-01
  • 2012-09-17
相关资源
最近更新 更多