亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

概念簡介

std::async 異步運行一個函數,將返回值保存在std::future中。

含有2個策略參數:

  • launch::deferred 延遲執(zhí)行,當調用wait()和get()時,任務才會被運行,且不創(chuàng)建線程;
  • launch::async : 創(chuàng)建線程并執(zhí)行任務,默認是此類型;
  • 同樣的,調用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)建延遲任務,這里不會啟動新線程
? ? auto future = std::async(std::launch::deferred, Func);
? ? //調用future.get()時,才會去調用Func?
? ? //讀者可以試著把這行代碼注釋掉,你會發(fā)現Func函數根本沒有創(chuàng)建
? ? std::cout << "Result = ?" << future.get() << std::endl;;
? ? //通過打印線程id我們發(fā)現,是在同一個線程中執(zhí)行的,沒有創(chuàng)建新線程
? ? return 0;
}

執(zhí)行結果

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)建異步任務 使用默認策略 ?啟動一個新線程
? ? //并且馬上會執(zhí)行異步任務代碼
? ? auto future = std::async(std::launch::async, Func, 100);
? ? //通過睡眠發(fā)現,get()調用之前,任務已經在被執(zhí)行了
? ? std::this_thread::sleep_for(std::chrono::seconds(5));
? ? std::cout << "Result = ?" << future.get() << std::endl;;
? ? //通過打印線程id我們發(fā)現,不是在同一個線程中執(zhí)行的,創(chuàng)建了新線程
? ? return 0;
}

運行結果:

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

補充

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

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

相關文章

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

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

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

    Qt實現界面滑動切換效果的思路詳解

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

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

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

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

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

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

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

    C語言學習之柔性數組詳解

    結構體的最后一個元素允許是未知大小的數組,這就叫柔性數組。這篇文中主要為大家詳細介紹了C語言中柔性數組的相關知識,需要的可以了解一下
    2023-03-03
  • 使用C++實現一個高效的線程池

    使用C++實現一個高效的線程池

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

    c++primer類詳解

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

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

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

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

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

最新評論