我想在几秒钟内使用 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/