欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++11異步與通信之std::async的使用

 更新時間:2023年08月15日 09:25:27   作者:KingOfMyHeart  
std::async 異步運(yùn)行一個函數(shù),將返回值保存在std::future中,本文主要介紹了C++11異步與通信之std::async的使用,具有一定的參考價值,感興趣的可以了解一下

概念簡介

std::async 異步運(yùn)行一個函數(shù),將返回值保存在std::future中。

含有2個策略參數(shù):

  • launch::deferred 延遲執(zhí)行,當(dāng)調(diào)用wait()和get()時,任務(wù)才會被運(yùn)行,且不創(chuàng)建線程;
  • launch::async : 創(chuàng)建線程并執(zhí)行任務(wù),默認(rèn)是此類型;
  • 同樣的,調(diào)用get()方法獲取對象時,也是阻塞等待的。

代碼示例

使用deferred策略

int Func()
{
? ? std::cout << "Func Thread id = " << std::this_thread::get_id() << std::endl;
? ? return 0;
}
int main()
{ ??
? ? std::cout << "Main Thread id = " << std::this_thread::get_id() << std::endl;
? ? //創(chuàng)建延遲任務(wù),這里不會啟動新線程
? ? auto future = std::async(std::launch::deferred, Func);
? ? //調(diào)用future.get()時,才會去調(diào)用Func?
? ? //讀者可以試著把這行代碼注釋掉,你會發(fā)現(xiàn)Func函數(shù)根本沒有創(chuàng)建
? ? std::cout << "Result = ?" << future.get() << std::endl;;
? ? //通過打印線程id我們發(fā)現(xiàn),是在同一個線程中執(zhí)行的,沒有創(chuàng)建新線程
? ? return 0;
}

執(zhí)行結(jié)果

Main Thread id = 140646835402560
Result =  Func Thread id = 140646835402560
0

使用async策略

int Func(int n)
{
? ? std::cout << "Func Thread id = " << std::this_thread::get_id() << std::endl;
? ? return -1;
}
int main()
{ ??
? ? std::cout << "Main Thread id = " << std::this_thread::get_id() << std::endl;
? ? //創(chuàng)建異步任務(wù) 使用默認(rèn)策略 ?啟動一個新線程
? ? //并且馬上會執(zhí)行異步任務(wù)代碼
? ? auto future = std::async(std::launch::async, Func, 100);
? ? //通過睡眠發(fā)現(xiàn),get()調(diào)用之前,任務(wù)已經(jīng)在被執(zhí)行了
? ? std::this_thread::sleep_for(std::chrono::seconds(5));
? ? std::cout << "Result = ?" << future.get() << std::endl;;
? ? //通過打印線程id我們發(fā)現(xiàn),不是在同一個線程中執(zhí)行的,創(chuàng)建了新線程
? ? return 0;
}

運(yùn)行結(jié)果:

Main Thread id = 140052716861248
Func Thread id = 140052716857088
Result =  -1

補(bǔ)充

與std::packaged_task相比,std::async不僅可以打包一個異步任務(wù),std::launch::async策略下還可以幫忙創(chuàng)建一個新線程并執(zhí)行任務(wù),某些場景下比std::packaged_task方便一些。

到此這篇關(guān)于C++11異步與通信之std::async的使用的文章就介紹到這了,更多相關(guān)C++11  std::async內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++發(fā)送郵件實現(xiàn)代碼

    C++發(fā)送郵件實現(xiàn)代碼

    這篇文章主要為大家詳細(xì)介紹了C++發(fā)送郵件的實現(xiàn)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • Qt實現(xiàn)界面滑動切換效果的思路詳解

    Qt實現(xiàn)界面滑動切換效果的思路詳解

    這篇文章主要介紹了Qt實現(xiàn)界面滑動切換效果,主要包括設(shè)計思路及主要函數(shù)講解,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • C++靜態(tài)成員變量和靜態(tài)成員函數(shù)的使用方法總結(jié)

    C++靜態(tài)成員變量和靜態(tài)成員函數(shù)的使用方法總結(jié)

    下面小編就為大家?guī)硪黄狢++靜態(tài)成員變量和靜態(tài)成員函數(shù)的使用方法總結(jié)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • centos 7 vscode cmake 編譯c++工程的教程詳解

    centos 7 vscode cmake 編譯c++工程的教程詳解

    這篇文章給大家介紹了centos 7 使用vscode+cmake配置簡單c++項目的方法,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2020-05-05
  • C語言堆棧幀的介紹與創(chuàng)建

    C語言堆棧幀的介紹與創(chuàng)建

    這篇文章主要給大家介紹了關(guān)于C語言堆棧幀的相關(guān)資料,堆棧幀 (stack frame)( 或活動記錄 (activation Tecord)) 是一塊堆棧保留區(qū)域,用于存放被傳遞的實際參數(shù)、子程序的返回值、局部變量以及被保存的寄存器,需要的朋友可以參考下
    2021-08-08
  • C語言學(xué)習(xí)之柔性數(shù)組詳解

    C語言學(xué)習(xí)之柔性數(shù)組詳解

    結(jié)構(gòu)體的最后一個元素允許是未知大小的數(shù)組,這就叫柔性數(shù)組。這篇文中主要為大家詳細(xì)介紹了C語言中柔性數(shù)組的相關(guān)知識,需要的可以了解一下
    2023-03-03
  • 使用C++實現(xiàn)一個高效的線程池

    使用C++實現(xiàn)一個高效的線程池

    在多線程編程中,線程池是一種常見且高效的設(shè)計模式,本文將詳細(xì)介紹如何使用C++實現(xiàn)一個線程池,并解析相關(guān)代碼實現(xiàn)細(xì)節(jié),需要的小伙伴可以參考下
    2024-12-12
  • c++primer類詳解

    c++primer類詳解

    今天小編就為大家分享一篇關(guān)于C++Primer中變量和基本類型的文章,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2021-09-09
  • C++11的新特性簡單匯總介紹 (一)

    C++11的新特性簡單匯總介紹 (一)

    本文將對C++11的以上新特性進(jìn)行簡單的講解,以便大家能夠快速了解到C++11對C++的易用性方面祈禱的巨大作用。
    2016-07-07
  • QT實戰(zhàn)之打開最近文檔功能的實現(xiàn)

    QT實戰(zhàn)之打開最近文檔功能的實現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了如何利用Qt實現(xiàn)打開最近文檔功能,并實現(xiàn)基本的新建、打開、保存、退出、幫助等功能,感興趣的可以動手嘗試一下
    2022-06-06

最新評論