1. 程式人生 > >C++11多執行緒------std::async

C++11多執行緒------std::async

std::async可以認為是封裝了一個std::promise,該函式返回一個std::future,用於獲取其他執行緒的資料。

一般有兩種模式:

  • std::lanch::async:最常用的非同步模式,每次都要執行一遍
  • std::lanch::defer:只在第一次呼叫的時候執行,之後再呼叫返回之前的呼叫結果。

給出程式碼示例:

#include <iostream>
#include <thread>
#include <chrono>
#include <future>
#include <string>
#include <cstdlib> using namespace std::chrono; std::string fetchDataFromDB(const std::string& recvData) { std::this_thread::sleep_for(seconds(3)); return "DB" + recvData; } std::string fetchDataFromFile(const std::string& recvData) { std::this_thread::sleep_for(seconds
(3)); return "File" + recvData; } int main() { system_clock::time_point start = system_clock::now(); std::future<std::string> resultFromDB = std::async(std::launch::async, fetchDataFromDB, "Data"); std::string fileData = fetchDataFromFile("Data"); std::string dbData =
resultFromDB.get(); auto end = system_clock::now(); auto diff = duration_cast<std::chrono::seconds>(end - start).count(); std::cout << "Total Time Taken = " << diff << " Seconds" << std::endl; std::string data = dbData + "::" + fileData; std::cout << "Data = " << data << std::endl; system("pause"); return 0; }

執行結果: