获取std :: future的状态

是否有可能检查std::future是否已经完成? 至于我可以告诉唯一的方法做到这一wait_for调用wait_for零持续时间,并检查状态是否ready ,但有没有更好的办法?

你是对的,除了用过去的时间(相当于)调用wait_until之外,没有更好的办法。

如果你想要一个更方便的语法,你总是可以写一个小包装器:

 template<typename R> bool is_ready(std::future<R> const& f) { return f.wait_for(std::chrono::seconds(0)) == std::future_status::ready; } 

注意,如果函数被延迟,这将永远不会返回true,所以最好直接检查wait_for ,如果在某个时间已经过去或者系统负载很低的时候可能想同步运行延迟任务的话。

在std :: future中有一个is_ready成员函数。 同时,VC实现有一个_Is_ready()成员。

我的第一个打赌是以0持续时间调用wait_for ,并检查可能是future_status::readyfuture_status::deferredfuture_status::timeout之一的结果代码。

在cppreference中,他们声明valid() 检查结果是否可用 ,但标准认为valid()将返回true如果*this指共享状态,则不pipe该状态是否准备好