获取 std::future 的状态

问题描述 投票:0回答:4

是否可以检查

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

c++ multithreading c++11 future
4个回答
110
投票

你是对的,除了用过去的时间(等效)调用

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


19
投票

std::future 有一个 is_ready 成员函数正在开发中。同时,VC 实现有一个 _Is_ready() 成员。


13
投票

我的第一个赌注是以 0 持续时间调用

wait_for
,并检查结果代码可以是
future_status::ready
future_status::deferred
future_status::timeout
之一。

如果

valid()

 引用共享状态,
true
将返回
*this
,无论该状态是否为 ready。请参阅cppreference


0
投票

从 C++11 开始,std::future 现在同时具有

wait()
get()
方法,该方法将等待 future 收到有效响应,后者方法等待(阻塞),然后在它返回结果时返回结果。准备好了。

© www.soinside.com 2019 - 2024. All rights reserved.