<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在前面幾篇文章中基本都用到thread物件,它是C++11中提供非同步建立多執行緒的工具。
但是我們想要從執行緒中返回非同步任務結果,一般需要依靠全域性變數;從安全形度看,有些不妥;為此C++11提供了std::future類別範本,future物件提供存取非同步操作結果的機制,很輕鬆解決從非同步任務中返回結果。
在C++標準庫中,有兩種“期望”
使用兩種型別模板實現
這裡主要介紹的是唯一期望,std::future類別範本定義標頭檔案<future>
其函數宣告如下:
template< class T > class future; //資料有關的期望 template< class T > class future<T&>; //資料無關的期望 template<> class future<void>;
對於future補充說明如下:
其成員函數如下:
其函數宣告如下:
void wait() const;
當共用狀態值是不可以用時,呼叫wait介面可以一直阻塞,直到共用狀態變為"就緒"時,就變為可以用了。
get是獲取共用狀態的結果它有以下三種形式:
//僅為泛型 future 模板的成員 T get(); //(僅為 future<T&> 模板特化的成員) T& get(); //僅為 future<void> 模板特化的成員 void get();
如果我們沒有呼叫wait介面,而是直接掉用get介面,它等價於先呼叫wait()而後在呼叫get介面,得到非同步操作的結果。
當呼叫此方法後 valid() 為 false ,共用狀態被釋放,即future物件釋一次性的事件。
按照自己的理解,將std::future物件的使用以及內部邏輯用時序圖進行表達,如下:
下面就用std::future物件來獲取非同步操作的結果,沒有使用到全域性變數,邏輯非常清晰
程式碼如下:
//通過async來獲取非同步操作結果 std::future<int> result = std::async([](){ std::this_thread::sleep_for(std::chrono::milliseconds(500)); return 8; }); std::cout << "the future result : " << result.get() << std::endl; std::cout << "the future status : " << result.valid() << std::endl; try { result.wait(); //或者 result.get() ,會異常 //因此std::future只能用於單執行緒中呼叫 ,多執行緒呼叫使用std::share_future(); } catch (...) { std::cout << "get error....n "; }
執行結果:
以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45