gpt4 book ai didi

c++ - 如何在指定的时间内运行循环

转载 作者:行者123 更新时间:2023-12-01 15:04:36 25 4
gpt4 key购买 nike

我想在指定的时间内运行一段代码。这似乎不起作用。为什么?

int sec = 5;
auto start = std::chrono::steady_clock::now();
while (std::chrono::duration<double, std::milli>(
start - std::chrono::steady_clock::now()
).count() < sec * 1000)
{
// do stuff
};

最佳答案

您的具体问题

您的问题似乎是反向减法:循环执行持续时间为 now() - start ,而不是 start - now() .

顺便说一下,代码美化一点供你考虑:

#include <chrono>

int main() {
auto now = std::chrono::steady_clock::now;
using namespace std::chrono_literals;
auto work_duration = 5s;
auto start = now();
while ( (now() - start) < work_duration)
{
// do stuff
};
}

(还有这个 compiles - 这是您应该确保问题中的代码发生的事情......)

概括

让我们更进一步,为您创建一个通用函数,用于在一定时间内运行某些东西:
#include <chrono>

template <typename F, typename Duration>
void timed_repeat(F f, Duration execution_duration)
{
auto now = std::chrono::steady_clock::now;
auto stop_time = now() + execution_duration;
while (now() < stop_time) { f(); };
}

int main() {
auto work_duration = std::chrono::seconds{5};
auto foo = []() {
// whatever
};
timed_repeat(foo, work_duration);
}

重要提示:请记住,工作持续时间是“总”而不是“净”,即如果您的进程被其他进程抢占,或者只是在 I/O 上休眠,这仍然计入运行 //whatever 所花费的时间。部分。对于您的原始代码片段和我的代码片段都是如此。

关于c++ - 如何在指定的时间内运行循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58877417/

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