是否可以检查
std::future
是否已完成?据我所知,唯一的方法是以零持续时间调用 wait_for
并检查状态是否为 ready
,但是有更好的方法吗?
你是对的,除了用过去的时间(等效)调用
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
。
std::future 有一个 is_ready 成员函数正在开发中。同时,VC 实现有一个 _Is_ready() 成员。
我的第一个赌注是以 0 持续时间调用
wait_for
,并检查结果代码可以是 future_status::ready
、future_status::deferred
或 future_status::timeout
之一。
如果 valid()
引用共享状态,
true
将返回 *this
,无论该状态是否为 ready。请参阅cppreference。