最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++多線程之帶返回值的線程處理函數(shù)解讀

 更新時間:2022年11月25日 09:18:45   作者:Tihu灌頂  
這篇文章主要介紹了C++多線程之帶返回值的線程處理函數(shù)解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

No.1 async:創(chuàng)建執(zhí)行線程

1.1 帶返回值的普通線程函數(shù)

第一步: 采用async:啟動一個異步任務(wù),(創(chuàng)建線程,并且執(zhí)行線程處理函數(shù)),返回值future對象

第二步: 通過future對象中的get()方法獲取線程返回值

#include <iostream>
#include <thread>
#include <future>
using namespace std;
int testThreadOne()
{
	cout<<"testThreadOne_id:"<<this_thread::get_id()<<endl;
	return 1001;
}
void testAsync1()
{
	future<int> result = async(testThreadOne);
	cout<<result.get()<<endl;
}

1.2 帶返回值的類成員函數(shù)

class Tihu
{
public:
	int TihuThread(int num)
	{
		cout<<"TihuThread_id"<<this_thread::get_id()<<endl;
		num *= 2;
		this_thread::sleep_for(2s);
		return num;
	}
}
void testAsync2()
	Tihu tihu;
	future<int> result = async(&Tihu::TihuThread,&tihu,1999);
	cout<<result.get()<<endl;
}

1.3 async的其他參數(shù)

  • launch::async: 創(chuàng)建線程并且執(zhí)行線程處理函數(shù)
  • launch::deferred:線程處理函數(shù)延遲到 我們調(diào)用wait和get方法的時候才會執(zhí)行,本質(zhì)是沒有創(chuàng)建子線程的

No.2 thread:創(chuàng)建線程

2.1 packaged_task: 打包線程處理函數(shù)

  • 通過類模板 packaged_task 包裝線程處理函數(shù)
  • 通過packaged_task的對象調(diào)用get_future獲取future對象,再通過get()方法得到子線程處理函數(shù)的返回值
void testPackaged_task()
{	
	//1. 打包普通函數(shù)
	packaged_task<int(void)> taskOne(testThreadOne);//函數(shù)返回值加上參數(shù)類型
	thread testOne(ref(taskOne));//需要使用ref轉(zhuǎn)換
	testOne.join();
	cout<<taskOne.get_future().get()<<endl;
	
	//2. 打包類中的成員函數(shù)
	//需要使用函數(shù)適配器進行封裝
	Tihu tihu;
	packaged_task<int(int)> taskTwo(bind(&Tihu::TihuThread,&tihu,placeholders::_1));//如果有參數(shù)需要使用占位符
	thread testTwo(ref(taskTwo),20);
	testTwo.join();
	cout<<testTwo.get_future().get()<<endl;

	//3. 打包Lambda表達式
	packaged_task<int(int)> taskThree([](int num)
	{
		cout<<"thread_id:"<<this_thread::get_id()<<endl;
		num *= 10;
		return num;
	});
	thread testTwo(ref(taskThree),7);
	testTwo.join();
	cout<<testTwo.get_future().get()<<endl;
	
}

2.2 promise: 獲取線程處理函數(shù)“返回值”

第一步: promise類模板,通過調(diào)用set_value存儲函數(shù)需要返回的值

第二步: 通過get_future()獲取future對象,再通過get()方法獲取線程處理函數(shù)中的值

void testPromiseThread(promise<int>& temp,int data)
{
?? ?cout<<"testPromise"<<this_thread::get_id()<<endl;
?? ?data *= 3;
?? ?temp.set_value(data);
}
void testPromise()
{
?? ?promise<int> temp;
?? ?thread testp(testPromiseThread,ref(temp),19);
?? ?testp.join();
?? ?cout<<temp.get_future().get()<<endl;
}
int main()
{
?? ?testAsync1();
?? ?testAsync2();

?? ?testPackaged_task();

?? ?testPromise();
?? ?
?? ?return 0;
}

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解C++11原子類型與原子操作

    詳解C++11原子類型與原子操作

    這篇文章主要介紹了C++11原子類型與原子操作的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)c++,感興趣的朋友可以了解下
    2020-08-08
  • VC6實現(xiàn)激活后臺窗口最佳方法

    VC6實現(xiàn)激活后臺窗口最佳方法

    這篇文章主要介紹了VC6實現(xiàn)激活后臺窗口最佳方法,實例分析了VC操作后臺窗口的技巧,需要的朋友可以參考下
    2015-06-06
  • VS2019實現(xiàn)C++的第一個MFC程序

    VS2019實現(xiàn)C++的第一個MFC程序

    本文主要介紹了VS2019實現(xiàn)C++的第一個MFC程序,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-06-06
  • Qt QTreeWidget 樹形結(jié)構(gòu)實現(xiàn)代碼

    Qt QTreeWidget 樹形結(jié)構(gòu)實現(xiàn)代碼

    Qt中實現(xiàn)樹形結(jié)構(gòu)可以使用QTreeWidget類,也可以使用QTreeView類,QTreeWidget繼承自QTreeView類,接下來通過本文給大家介紹Qt QTreeWidget 樹形結(jié)構(gòu)實現(xiàn)代碼,需要的朋友可以參考下
    2021-11-11
  • C++實現(xiàn)貪心算法的示例詳解

    C++實現(xiàn)貪心算法的示例詳解

    這篇文章主要通過幾個試題為大家詳細介紹了C++中貪心算法的實現(xiàn),文中的示例代碼講解詳細,對我們學(xué)習(xí)貪心算法有一定的幫助,需要的可以參考一下
    2022-07-07
  • 淺談Qt QGraphics體系及刷新機制介紹

    淺談Qt QGraphics體系及刷新機制介紹

    這篇文章主要介紹了淺談Qt QGraphics體系及刷新機制介紹,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • Qt簡單實現(xiàn)密碼器控件

    Qt簡單實現(xiàn)密碼器控件

    這篇文章主要為大家詳細介紹了Qt簡單實現(xiàn)密碼器控件,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • C++的函數(shù)與指針

    C++的函數(shù)與指針

    今天小編就為大家分享一篇關(guān)于C++函數(shù)與指針的文章,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2021-10-10
  • OpenCV實現(xiàn)給圖片添加邊框功能

    OpenCV實現(xiàn)給圖片添加邊框功能

    這篇文章主要為大家詳細介紹了OpenCV實現(xiàn)給圖片添加邊框功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • C語言詳解冒泡排序?qū)崿F(xiàn)

    C語言詳解冒泡排序?qū)崿F(xiàn)

    冒泡排序是一種簡單的排序算法,它也是一種穩(wěn)定排序算法。其實現(xiàn)原理是重復(fù)掃描待排序序列,并比較每一對相鄰的元素,當(dāng)該對元素順序不正確時進行交換。一直重復(fù)這個過程,直到?jīng)]有任何兩個相鄰元素可以交換,就表明完成了排序
    2022-04-04

最新評論

盐源县| 西吉县| 岱山县| 吉木萨尔县| 柳州市| 金溪县| 西昌市| 栾城县| 栾川县| 绵阳市| 乐清市| 桓台县| 新田县| 资兴市| 临沧市| 黔西| 新民市| 渑池县| 周至县| 咸阳市| 西平县| 宁乡县| 永城市| 二连浩特市| 渑池县| 古交市| 积石山| 开远市| 延寿县| 文安县| 永平县| 托里县| 广元市| 乌鲁木齐市| 汶川县| 兖州市| 桦甸市| 三原县| 冕宁县| 贵德县| 获嘉县|