C++ chrono 2个时钟之间的秒数差异

标签 c++ c++-chrono

我想在几秒钟内使用 chrono 库找出 2 个时钟之间的差异。我尝试了多种方法,以下是其中之一。所有这些都工作正常,直到差异为 59 秒,但之后超时。我真的需要差异的实际值,即使它超过 59 秒

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

int main ()
{
    using std::chrono::system_clock;
   using std::chrono::milliseconds;
   using std::chrono::seconds;
   using std::chrono::duration_cast;
   const auto duration = milliseconds(1000);
   const auto start = system_clock::now();

   for(int i=0; i<65; i++)
   {
       std::this_thread::sleep_for(duration);
   const auto stop = system_clock::now();

   const auto difference = std::chrono::duration_cast<seconds>(stop - start).count();

   std::cout << "Difference is =>" << difference << std::endl;

   }
}

上面的输出差值直到 59,然后超时。这是怎么回事?

最佳答案

此代码运行良好:我可以在 macOs 上使用 Xcode 并在 Wingdows 上使用 MSVC2017 成功编译和执行它,如预期的那样获得计时到 65。

std::chrono 不限制以秒为单位的持续时间为 60。 std::chrono::seconds 只是一个度量单位。您甚至可以找出可以用这种方式计算的最大秒数。当然,有系统相关的限制,但这些限制远高于 60:

std::cout << "Max is " 
    << std::chrono::duration_cast<seconds>(start-start).max().count() << std::endl;

我也得到了预期的结果 ideone ( online demo ),时间在 60 到 65 之间。但是 ideone 的执行时间限制约为 10 秒,因此它第一次超时。所以我不得不通过从开始时间减去 55 秒来调整您的代码:

const auto start = system_clock::now()-milliseconds(55000);

您的代码没有理由失败,除了编译器/库相关的错误。

关于C++ chrono 2个时钟之间的秒数差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44352553/

相关文章:

c++ - 在其他类中使用标题中的枚举

c++ - 我可以将普通文件链接到我的可执行文件吗?

c++ - 获取包含时间间隔的字符串的最简单方法

c++ - boost::asio::basic_waitable_timer 自定义时钟

c++ - 如何将 `duration_cast` 用于派生类?

c++ - 使用单独的线程从文件预加载数据

c++ - __uuidof(someVar) 是做什么的?

c++ - 抽象类修复的虚析构函数是模糊的

c++ - 二进制 '>=' : 'std::chrono::system_clock::time_point'

performance - 1000 万个输入的合并排序