c++11 std::future和std::async
阿新 • • 發佈:2018-12-12
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狀態。