Dav*_*own 69 c++ multithreading future c++11
是否可以检查a std::future是否已经完成?据我所知,唯一的方法就是调用wait_for零持续时间并检查状态是否ready存在,但是有更好的方法吗?
Jon*_*ely 70
你是对的,除了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; }
Run Code Online (Sandbox Code Playgroud)
注意,如果函数延迟,则永远不会返回true,因此wait_for在经过一定时间或系统负载较低后可能需要同步运行延迟任务的情况下,最好直接检查.
我的第一个赌注是wait_for用0持续时间调用,并检查结果代码,可以是future_status::ready,future_status::deferred或者future_status::timeout.
在cppreference中,他们声称valid() 检查结果是否可用,但标准表示如果引用共享状态valid()将返回,而与该状态是否准备无关.true*this