gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 05:07:27 29 4
gpt4 key购买 nike

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

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com