稍后从线程函数中获取返回值

C++ Get the return value from a threaded function later

本文关键字:获取 返回值 函数 线程      更新时间:2023-10-16

是否可以不等待线程函数的返回值?例如稍后检查是否返回值,并在该函数执行时做其他事情?我的意思是,如果你必须等待函数返回,那就不是真正的多线程,因为你可以直接调用函数。

#include <thread>
#include <future>
int func_1(int x)
{ 
    return x; //Assume this takes several seconds to complete
}
int main()
{
      auto future = std::async(func_1, 2);
      int number = future.get(); //Whole program waits for this
      //More code later
      while(!number) //Check if number ever returned?
      {
            //Wait for it or assume some error/default
      }
      return 0;
}

您正在立即请求结果,而不是做其他事情然后在需要时获得结果。如果你这样做:

int main()
{
      auto future = std::async(func_1, 2);          
      //More code later
      int number = future.get(); //Whole program waits for this
      // Do something with number
      return 0;
}

然后你可以在More code later位做一些其他的事情,然后当你需要调用get()的结果时阻塞。

或者,您可以轮询使用wait_for或wait_until来查看值是否可用,如果结果没有准备好,则执行一些操作。

您可以通过零超时调用future::wait_for来检查未来是否准备好,并检查返回值是否等于future_status::ready

Btw: std::async返回特殊的期货,你应该考虑是否真的想使用它。更详细的信息:http://scottmeyers.blogspot.com/2013/03/stdfutures-from-stdasync-arent-special.html