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(),因为它是一个对我来说非常有意义的构造。
我可以传递给那些具有明确定义行为的函数的最高值是多少?