获取一个std ::未来的地位获取一个std ::未来的地位(Get the status of a

2019-05-17 07:36发布

是否有可能来检查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::readyfuture_status::deferredfuture_status::timeout

在cppreference他们声称valid() 检查如果结果是可用的 ,但标准说, valid()将返回true ,如果*this的那种状态是否准备好与否是指共享状态,独立。



文章来源: Get the status of a std::future