是否有可能来检查std::future
已经完成或没有? 至于我可以告诉做到这将是调用的唯一途径wait_for
以零时间和检查状态ready
与否,但有没有更好的办法?
Answer 1:
你是正确的,除了呼吁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; }
NB如果函数被推迟,这将永远不会返回true,所以它可能更好地检查wait_for
直接的情况下,你可能要同步运行的递延任务一定时间后或在系统负载低。
Answer 2:
这里有一个is_ready成员函数的作品性病::未来。 在此期间,VC实现了一个_Is_ready()成员。
Answer 3:
我的第一选择将是调用wait_for
以0持续时间,并检查结果代码可以是一个future_status::ready
, future_status::deferred
或future_status::timeout
。
在cppreference他们声称valid()
检查如果结果是可用的 ,但标准说, valid()
将返回true
,如果*this
的那种状态是否准备好与否是指共享状态,独立。
文章来源: Get the status of a std::future