2017-06-04 56 views
0

我想在秒钟内使用chrono库找到2个时钟之间的差异。我尝试了各种方式,以下是其中之一。他们都能正常工作,直到差距达到59秒,但在此之后超时。我真的需要即使超过59秒的差异的实际价值C++ chrono秒钟内2个时钟之间的差异

#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

此代码工作正常:如预期,我可以编译和成功地执行它与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; 

我也得到预期的结果ideoneonline demo),其中60和65,但ideone之间的时序有一个执行时间限制在10秒左右,以便首次超时。因此,我不得不从开始时从其减去55秒调整你的代码:

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

没有理由为您的代码失败,除了一个编译器/库依赖的错误。

+1

还在Linux上用GCC测试过,效果很好。 – ShadowMitia

+0

@ShadowMitia感谢您的反馈!而时间,开始我的Windows机器,我可以证实,它的作品以及与MSVC2017的窗户。 – Christophe

+0

是的,它工作得很好。谢谢。我在http://cpp.sh中尝试过它在59秒后停止 – User

相关问题