【发布时间】:2019-08-18 16:58:27
【问题描述】:
#include <iostream>
#include <chrono>
#include <future>
using namespace std::literals;
int main()
{
std::promise<void> prom;
auto fut = prom.get_future();
std::cout << std::boolalpha << (
std::future_status::timeout ==
fut.wait_for(std::chrono::seconds::max())
);
}
代码应该什么也不输出,因为fut.wait_for 会等待很长时间。但是,它会立即输出true!
为什么std::future::wait_for 的行为不符合预期?
【问题讨论】:
-
这可能是由于相对时间计算中的溢出(
system_clock::now() + chrono::seconds::max())。 -
@1201ProgramAlarm 我认为这正是它的本质,g++ 实现就像你的 sn-p 一样转换为绝对时间。
-
我调试了 g++ 实现,就是这样。尽管 cppreference.com 上的所有“wait_for”都这样描述它们,但我无法从标准中确定是否允许这样做。
-
我在标准中看不到任何允许此操作无效的内容。提交错误?
标签: c++ multithreading c++11 time future