99

是否可以检查 astd::future是否已完成?据我所知,唯一的方法是wait_for用零持续时间调用并检查状态是否ready存在,但有更好的方法吗?

4

3 回答 3

96

你是对的,除了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在您可能希望在经过一定时间后或系统负载较低时同步运行延迟任务的情况下,最好直接检查。

于 2012-06-06T16:06:38.027 回答
17

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

于 2014-05-04T23:56:56.707 回答
11

我的第一个赌注wait_for是以 0 的持续时间进行调用,并检查可以是future_status::readyfuture_status::deferred或的结果代码future_status::timeout

valid()true如果引用共享状态,则将返回*this,与该状态是否就绪无关。请参阅cppreference

于 2012-06-05T03:07:11.583 回答