我想在几秒钟内找到使用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,然后超时。这里怎么了?
答案 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之外,您的代码没有理由失败。