相关疑难解决方法(0)

我可以传递给 std::thread::sleep_for() 和 sleep_until() 的最大值是多少?

这个关于永远睡觉的问题有一个提到这一点的答案:

std::this_thread::sleep_until(
    std::chrono::time_point<std::chrono::system_clock>::max());
Run Code Online (Sandbox Code Playgroud)

和这个:

std::this_thread::sleep_for(
    std::chrono::system_clock::durat??ion::max());
Run Code Online (Sandbox Code Playgroud)

在 Visual C++ 2017 RC 上运行此代码实际上根本不休眠。我没有检查过这个sleep_until()案例,所以我不确定那里发生了什么。

在这种sleep_for()情况下,通过将给定duration的时间添加到绝对时间,system_clock::now()然后将其转发到sleep_until(). 问题是加法溢出,给一个时间过去。

查看 30.3.2 中的 C++17 草案,既没有sleep_until()sleep_for()没有提到限制。时序规范(30.2.4) 中没有任何相关内容。至于duration::max(),它在duration_values(20.17.4.3)中描述为:“返回的值应比较大于zero()”,这根本没有帮助。

老实说,我很惊讶地看到sleep_for()失败system_clock::duration::max(),因为它是一个对我来说非常有意义的构造。

我可以传递给那些具有明确定义行为的函数的最高值是多少?

c++ sleep c++-chrono

4
推荐指数
1
解决办法
1361
查看次数

标签 统计

c++ ×1

c++-chrono ×1

sleep ×1