C ++ chrono两个时钟之间的差异,以秒为单位

时间:2017-06-04 09:22:10

标签: 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,然后超时。这里怎么了?

1 个答案:

答案 0 :(得分:1)

这段代码工作正常:我可以在使用Xcode的macOs和使用MSVC2017的Wingdows上成功编译和执行它,按照预期获得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);

除了编译器/库依赖的bug之外,您的代码没有理由失败。