1. 程式人生 > >c++11 std::future和std::async

c++11 std::future和std::async

std::future可以從非同步任務中獲取結果,一般與std::async配合使用,std::async用於建立非同步任務,實際上就是建立一個執行緒執行相應任務。

 

 使用程式碼如下:

#include <future>
#include <iostream>
#include <stout/stringify.hpp>

bool is_prime(int x)
{
  for (int i=0; i<x; i++)
  {
    if (x % i == 0)
      return false;
  }
  
return true; } int main() { std::future<bool> fut = std::async(is_prime, 700020007); std::cout << "please wait"; std::chrono::milliseconds span(100); while (fut.wait_for(span) != std::future_status::ready) std::cout << "."; std::cout << std::endl; bool ret = fut.get
(); std::cout << "final result: " << stringify(ret) << std::endl; return 0; }

 std::async會首先建立執行緒執行is_prime(700020007), 任務建立之後,std::async立即返回一個std::future物件。

 主執行緒既可使用std::future::get獲取結果,如果呼叫過程中,任務尚未完成,則主執行緒阻塞至任務完成。

 主執行緒也可使用std::future::wait_for等待結果返回,wait_for可設定超時時間,如果在超時時間之內任務完成,則返回std::future_status::ready狀態;如果在超時時間之內任務尚未完成,則返回std::future_status::timeout狀態。