AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當(dāng)前位置:首頁 > 科技  > 軟件

C++ 之std::future:理解并掌握異步編程的利器

來源: 責(zé)編: 時(shí)間:2023-11-28 09:37:26 308觀看
導(dǎo)讀引言最近因?yàn)轫?xiàng)目要求用c++,之前一直很討厭c++,沒辦法只能短時(shí)間彌補(bǔ)c++的知識,項(xiàng)目中要設(shè)計(jì)一個(gè)線程池,需要取線程池任務(wù)的執(zhí)行結(jié)果,這里涉及到c++的future關(guān)鍵字,在這里做個(gè)總結(jié)。在C++的世界里,std::future是一種非常重要

引言

最近因?yàn)轫?xiàng)目要求用c++,之前一直很討厭c++,沒辦法只能短時(shí)間彌補(bǔ)c++的知識,項(xiàng)目中要設(shè)計(jì)一個(gè)線程池,需要取線程池任務(wù)的執(zhí)行結(jié)果,這里涉及到c++的future關(guān)鍵字,在這里做個(gè)總結(jié)。p5a28資訊網(wǎng)——每日最新資訊28at.com

在C++的世界里,std::future是一種非常重要的工具,它讓我們能夠以異步的方式執(zhí)行代碼,并在需要的時(shí)候獲取結(jié)果。隨著C++11標(biāo)準(zhǔn)的引入,std::future成為了C++標(biāo)準(zhǔn)庫的一部分,它為我們提供了強(qiáng)大的異步編程支持。p5a28資訊網(wǎng)——每日最新資訊28at.com

p5a28資訊網(wǎng)——每日最新資訊28at.com

std::future,基本概念

std::future是C++的一種模板類,它代表了一個(gè)異步操作的結(jié)果。通過使用std::future,我們可以將一個(gè)異步操作封裝成一個(gè)對象,然后在需要的時(shí)候獲取結(jié)果。通常,std::future是與另一個(gè)線程協(xié)同工作的結(jié)果。p5a28資訊網(wǎng)——每日最新資訊28at.com

(1) 創(chuàng)建std::future對象p5a28資訊網(wǎng)——每日最新資訊28at.com

使用std::async函數(shù)來創(chuàng)建一個(gè)異步操作,并返回一個(gè)std::future對象:p5a28資訊網(wǎng)——每日最新資訊28at.com

std::future<int> fut = std::async(std::launch::async, [](){ /* 執(zhí)行一些異步操作 */ });

這里使用std::async啟動了一個(gè)異步操作,并返回一個(gè)std::future對象。這個(gè)異步操作可以是任意的函數(shù)或可調(diào)用對象,而返回值則是該操作的返回值。p5a28資訊網(wǎng)——每日最新資訊28at.com

(2) 獲取std::future的結(jié)果p5a28資訊網(wǎng)——每日最新資訊28at.com

一旦異步操作完成,就可以通過調(diào)用std::future::get函數(shù)來獲取結(jié)果。例如:p5a28資訊網(wǎng)——每日最新資訊28at.com

int result = fut.get(); // 阻塞等待結(jié)果并獲取

通過調(diào)用fut.get()來獲取異步操作的結(jié)果。如果結(jié)果還未就緒,調(diào)用get()將導(dǎo)致當(dāng)前線程阻塞,直到結(jié)果就緒為止。p5a28資訊網(wǎng)——每日最新資訊28at.com

(3) 異常處理p5a28資訊網(wǎng)——每日最新資訊28at.com

當(dāng)異步操作拋出異常時(shí),我們可以使用std::future::get來獲取異常信息。例如:p5a28資訊網(wǎng)——每日最新資訊28at.com

try {      fut.get(); // 獲取結(jié)果并處理異常  } catch (const std::exception& e) {      // 處理異常情況  }

通過調(diào)用fut.get()來獲取異步操作的結(jié)果。如果異步操作拋出了異常,那么這個(gè)異常將被傳遞給調(diào)用get()的線程,我們可以通過捕獲異常來處理這種情況。p5a28資訊網(wǎng)——每日最新資訊28at.com

舉個(gè)栗子

定義一個(gè)簡單的任務(wù)類Task,它接受一個(gè)整數(shù)參數(shù)作為標(biāo)識符,并在執(zhí)行時(shí)計(jì)算該標(biāo)識符的兩倍值并返回。然后,我們創(chuàng)建了一個(gè)包含4個(gè)任務(wù)的vector,并使用std::async函數(shù)將每個(gè)任務(wù)提交到線程池中。每個(gè)任務(wù)返回一個(gè)std::future<int>對象,代表了異步操作的結(jié)果。然后遍歷所有的std::future對象,并通過調(diào)用get()函數(shù)獲取結(jié)果。注意,調(diào)用get()函數(shù)會阻塞當(dāng)前線程,直到結(jié)果就緒為止。最后,將每個(gè)任務(wù)的計(jì)算結(jié)果打印到終端。p5a28資訊網(wǎng)——每日最新資訊28at.com

#include <iostream>#include <thread>#include <future>#include <vector>// 定義一個(gè)簡單的任務(wù)類class Task {public:    Task(int id) : id(id) {}    int operator()() {        // 執(zhí)行一些異步操作        std::this_thread::sleep_for(std::chrono::seconds(2));        return result = id * 2; // 計(jì)算結(jié)果    }    int getResult() const {        return result;    }private:    int id; // 任務(wù)的標(biāo)識符    int result; // 計(jì)算結(jié)果};int main() {    // 創(chuàng)建一個(gè)包含4個(gè)任務(wù)的向量    std::vector<Task> tasks = {Task(1), Task(2), Task(3), Task(4)};    // 創(chuàng)建一個(gè)線程池,并提交任務(wù)到線程池    std::vector<std::future<int>> futures;    for (auto& task : tasks) {        futures.push_back(std::async(std::launch::async, task));    }    // 遍歷未來的結(jié)果,并打印出來    for (auto& future : futures) {        std::cout << "Result: " << future.get() << std::endl; // 阻塞等待結(jié)果并獲取    }    return 0;}

使用g++編譯執(zhí)行結(jié)果:因?yàn)閒uture實(shí)現(xiàn)使用了pthread,所有編譯要帶上-lpthreadp5a28資訊網(wǎng)——每日最新資訊28at.com

p5a28資訊網(wǎng)——每日最新資訊28at.com

總結(jié)

為什么關(guān)注 std::future呢?因?yàn)閟td::future 提供了一種高效的方式來處理異步操作,使得程序可以充分利用多核處理器和異步任務(wù)執(zhí)行的優(yōu)勢。通過使用 std::future,可以更輕松地實(shí)現(xiàn)并發(fā)性和異步性,提高程序的性能和響應(yīng)能力。p5a28資訊網(wǎng)——每日最新資訊28at.com

std::future 作為 C++ 中異步編程的關(guān)鍵部分,其內(nèi)核實(shí)現(xiàn)涉及復(fù)雜的多線程和異步任務(wù)機(jī)制。理解其內(nèi)部原理對于編寫高效、并發(fā)的程序至關(guān)重要。通過合理利用 std::future,能夠在保持代碼清晰易懂的同時(shí),充分發(fā)揮異步編程的優(yōu)勢。p5a28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-34687-0.htmlC++ 之std::future:理解并掌握異步編程的利器

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: PHP 8.3 正式發(fā)布!

下一篇: 用 Addon 增強(qiáng) Node.js 和 Electron 應(yīng)用的原生能力

標(biāo)簽:
  • 熱門焦點(diǎn)
  • 紅魔電競平板評測:大屏幕硬實(shí)力

    前言:三年的疫情因?yàn)橐暇W(wǎng)課的原因激活了平板市場,如今網(wǎng)課的時(shí)代已經(jīng)過去,大家的生活都恢復(fù)到了正軌,這也就意味著,真正考驗(yàn)平板電腦生存的環(huán)境來了。也就是面對著這種殘酷的
  • 小米降噪藍(lán)牙耳機(jī)Necklace分享:聽一首歌 讀懂一個(gè)故事

    在今天下午的小米Civi 2新品發(fā)布會上,小米還帶來了一款新的降噪藍(lán)牙耳機(jī)Necklace,我們也在發(fā)布結(jié)束的第一時(shí)間給大家?guī)磉@款耳機(jī)的簡單分享。現(xiàn)在大家能見到最多的藍(lán)牙耳機(jī)
  • 2023年Q2用戶偏好榜:12+256G版本成新主流

    3月份的性能榜、性價(jià)比榜和好評榜之后,就要輪到2023年的第二季度偏好榜了,上半年的新機(jī)潮已經(jīng)過去,最明顯的肯定就是大內(nèi)存和存儲的機(jī)型了,另外部分中端機(jī)也取消了屏幕塑料支架
  • 5月iOS設(shè)備好評榜:iPhone 14僅排第43?

    來到新的一月,安兔兔的各個(gè)榜單又重新匯總了數(shù)據(jù),像安卓陣營的榜單都有著比較大的變動,不過iOS由于設(shè)備的更新?lián)Q代并沒有那么快,所以相對來說變化并不大,特別是iOS好評榜,老款設(shè)
  • CSS單標(biāo)簽實(shí)現(xiàn)轉(zhuǎn)轉(zhuǎn)logo

    轉(zhuǎn)轉(zhuǎn)品牌升級后更新了全新的Logo,今天我們用純CSS來實(shí)現(xiàn)轉(zhuǎn)轉(zhuǎn)的新Logo,為了有一定的挑戰(zhàn)性,這里我們只使用一個(gè)標(biāo)簽實(shí)現(xiàn),將最大化的使用CSS能力完成Logo的繪制與動畫效果。新logo
  • 一篇聊聊Go錯(cuò)誤封裝機(jī)制

    %w 是用于錯(cuò)誤包裝(Error Wrapping)的格式化動詞。它是用于 fmt.Errorf 和 fmt.Sprintf 函數(shù)中的一個(gè)特殊格式化動詞,用于將一個(gè)錯(cuò)誤(或其他可打印的值)包裝在一個(gè)新的錯(cuò)誤中。使
  • ESG的面子與里子

    來源 | 光子星球撰文 | 吳坤諺編輯 | 吳先之三伏大幕拉起,各地高溫預(yù)警不絕,但處于厄爾尼諾大&ldquo;烤&rdquo;之下的除了眾生,還有各大企業(yè)發(fā)布的ESG報(bào)告。ESG是&ldquo;環(huán)境保
  • 華為發(fā)布HarmonyOS 4:更好玩、更流暢、更安全

    在8月4日的華為開發(fā)者大會2023(HDC.Together)大會上,HarmonyOS 4正式發(fā)布。自2019年發(fā)布以來,HarmonyOS一直以用戶為中心,經(jīng)歷四年多的發(fā)展HarmonyOS已
  • Counterpoint :OPPO雙旗艦戰(zhàn)略全面落地 高端產(chǎn)品銷量增長22%

    2023年6月30日,全球行業(yè)分析機(jī)構(gòu)Counterpoint Research發(fā)布的《中國智能手機(jī)高端市場白皮書》顯示,中國智能手機(jī)品牌正在尋求高質(zhì)量發(fā)展,中國高端智能
Top