是否可以检查 astd::future
是否已完成?据我所知,唯一的方法是wait_for
用零持续时间调用并检查状态是否ready
存在,但有更好的方法吗?
问问题
41930 次
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::ready
、future_status::deferred
或的结果代码future_status::timeout
。
valid()
true
如果引用共享状态,则将返回*this
,与该状态是否就绪无关。请参阅cppreference。
于 2012-06-05T03:07:11.583 回答