C 執行緒學習二(future成員函式)

2021-09-28 19:36:55 字數 1651 閱讀 5055

示例一:future的成員函式與基本使用

member()函式後面會有定義與宣告,目前只是介紹future的使用

cout << "main thread id " << this_thread::get_id() << endl;

std::futureres = std::async(memberfun,1); // 建立乙個執行緒開始執行

cout << "continue ... " << endl;

//cout << res.get() << endl; // 卡在這裡等待threasio執行完

// res.wait();

std::future_status status = res.wait_for(std::chrono::seconds(6));

if (status == std::future_status::timeout) // 執行緒超時

else if (status == std::future_status::ready) // 成功返回

else if (status == std::future_status::deferred) // 執行緒延遲執行,

示例二:shared_future 使用範例 一

std::futureful = tpromise.get_future();   // 拿到上乙個執行緒的

//std::shared_futureresshare(std::move(ful));

//std::shared_futureresshare(ful.share()); // 兩種方式都可以

bool fulvalue = ful.valid(); // 判斷ful是否有有效值

std::shared_futurefulshare(ful.share());

fulvalue = ful.valid();

auto threadres = fulshare.get();

std::thread t1(prothread, std::ref(ful));// get()不能重複呼叫,在prothread()函式中有呼叫

t1.join();

示例三:shared_future 使用範例 二

std::shared_futureful(tpromise.get_future());    // 通過get_future返回值,構造乙個get_future物件

auto threadres = ful.get();

cout << "threadres " << threadres << endl;

cout << "end" << endl;

示例四:整體介紹

#include #include #include #include using namespace std;

int memberfun(int num)

void promisethread(std::promise&temp, int num)

void prothread(std::shared_future&temp)

int main()

《探索C 多執行緒》 future原始碼(二)

std promise promise物件可以儲存某一t型別的值,該值可以被future物件 可能在另乙個執行緒中 獲取,因此promise也提供了一種同步手段。在構造時,promise物件與乙個新的共享狀態 通常是std future 相關聯,他們可以儲存t型別的值或從std exception派...

C 11多執行緒 執行緒結果future

先用std async啟動乙個非同步任務,它返回乙個持有計算結果的std future,通過std future get即可阻塞執行緒,直到期值的狀態為ready並返回該結果 intf int main intf 函式必須非同步執行,即執行在不同的執行緒上 auto ft1 std async st...

c 11 多線執行緒 future

std promise 類介紹 promise 物件可以儲存某一型別 t 的值,該值可被 future 物件讀取 可能在另外乙個執行緒中 因此 promise 也提供了一種執行緒同步的手段。在 promise 物件構造時可以和乙個共享狀態 通常是std future 相關聯,並可以在相關聯的共享狀態...