c++ 異步(下) future頭文件

future

  • std::future 類型模板是為了等待其他線程上的異步結(jié)果,其和 std::promise,std::packaged_task類型模板,還有std::async函數(shù)模板,都是為異步結(jié)果準(zhǔn)備的工具。std::shared_future實例可以引用同一個異步結(jié)果。
  • std::packaged_task 類型模板可打包一個函數(shù)或其他可調(diào)用對象,所以當(dāng)函數(shù)通過 std::packaged_task實例被調(diào)用時,結(jié)果將會作為異步結(jié)果。這個結(jié)果可以通過檢索 std::future 實例來查找。
  • std::promise 類型模板提供設(shè)置異步結(jié)果的方法,這樣其他線程就可以通過 std::future 實例來索引該結(jié)果。

例子

promise

函數(shù)的返回值被保存在promise變量里面,需要的時候可以拿出來用。

std::promise<int> pr;
std::thread t([](std::promise<int> &pr){
     pr.set_value_at_thread_exit(11);
},std::ref(pr));
auto fut = pr.get_future();
std::cout<<fut.get()<<std::endl;
packaged_task

將函數(shù)保存在packaged_task里面,函數(shù)的返回結(jié)果可以在需要的時候取出來用.

std::packaged_task<int()> task([](){return 2;});
std::thread t1(std::ref(task));
std::cout<<task.get_future().get()<<std::endl;

最終都是轉(zhuǎn)化成std::future變量,從此中取出函數(shù)運行的結(jié)果。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容