【问题标题】:Chrono - The difference between two points in time in milliseconds?Chrono - 两个时间点之间的差异(以毫秒为单位)?
【发布时间】:2015-10-17 21:35:14
【问题描述】:

如何(使用 std::chrono 库)获取两个时间点之间的差异(以毫秒为单位)?

我可以用这个来做到这一点:

std::chrono::time_point<std::chrono::system_clock> now = std::chrono::system_clock::now();

std::chrono::time_point<std::chrono::system_clock> foo = now + std::chrono::milliseconds(100);

std::chrono::duration<float> difference = foo - now;

const int milliseconds = difference.count() * 1000;

如何以毫秒为单位获得这个时间,这样我就可以将持续时间用作无符号整数,而不是浮点数,然后乘以 1000?

【问题讨论】:

  • chrono::duration_cast&lt;chrono::milliseconds&gt;(end_time - start_time).count()
  • 我花了 2 秒钟。谷歌把我带到了你的答案。
  • 致在谷歌上搜索以毫秒为单位的时差后来到这里的人:小心!这个问题和答案的重点是如何获得一个整数毫秒的持续时间。如果您有更高精度的时间点(例如纳秒)并且您想保留所有数字而不截断,但您想转换为毫秒,您可以使用duration_cast&lt;duration&lt;float,std::milli&gt;(difference).count()。使用duration_cast&lt;milliseconds&gt;(duration).count() 会截断您的数字,因为milliseconds 基本上是duration&lt;long,milli&gt;

标签: c++ c++11 time chrono


【解决方案1】:

std::chrono::duration 有两个模板参数,第二个正是度量单位。您可以调用 std::chrono::duration_cast 从一种持续时间类型转换为另一种持续时间类型。此外,还有一个预定义的毫秒持续时间类型:std::chrono::milliseconds。组合起来:

auto milliseconds = std::chrono::duration_cast<std::chrono::milliseconds>(foo - now);

要获取实际的毫秒数,请使用duration::count

auto ms = milliseconds.count();

它的返回类型是duration::rep,对于像std::chrono::milliseconds这样的标准持续时间类型,它是一个未指定大小的有符号整数。

【讨论】:

    【解决方案2】:
    chrono::duration_cast<chrono::milliseconds>(end_time - start_time).count()
    

    【讨论】:

      【解决方案3】:

      我遇到了用 e-09 之类的字母打印出来的持续时间问题。这是我修复它的方法:

      auto start = std::chrono::high_resolution_clock::now();
      < run your function or code here >
      auto finish = std::chrono::high_resolution_clock::now();
      std::chrono::duration<double, std::milli> elapsed = finish - start;
      std::cout << "Elapsed Time: " << elapsed.count() << " seconds" << std::endl;
      

      现在我得到了想要的结果:

      Elapsed Time: 34.406 seconds
      

      【讨论】:

      • 我发现该代码中有两点奇怪:首先,chrono 库使用有理数(整数分子和分母),所以在这里使用 double 似乎很奇怪。其次,我看不到从毫秒到秒的转换发生在哪里。
      【解决方案4】:

      http://www.cplusplus.com/reference/chrono/duration_cast/

      std::chrono::duration_cast<std::chrono::milliseconds>();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-07-22
        • 2014-05-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-13
        相关资源
        最近更新 更多