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

时间:2016-09-30 13:55:21

标签: c++ multithreading return future

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

 var client = new SmtpClient("smtp.gmail.com", 587)
            {
                Credentials = new NetworkCredential("myusername@gmail.com", "mypassword"),
                EnableSsl = true
            };
            client.Send("myusername@gmail.com", "myusername@gmail.com", "test", "testbody");
            Console.WriteLine("Sent");
            Console.ReadLine();

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

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

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_forwait_until查看该值是否可用,并在结果尚未就绪时执行某些操作。