(1)はstd ::非同期、のstd ::将来バックグラウンドタスクを作成してリターンする
(2)のstd :: packaged_task
(3)のstd ::約束
の(4)まとめ
、STD ::非同期、のstd ::将来、バックグラウンドタスクを作成戻り値は、
スレッドが結果を返したいと考えている。
STD ::非同期機能テンプレートは、非同期タスクを開始するために使用され、非同期タスクを起動した後、
彼はSTDに戻っ::将来のオブジェクト、STD ::未来はクラステンプレートで
あるもの非同期タスクああを開始?
それは自動的にスレッドを作成して、返し、対応するスレッドエントリ機能、実行を開始
関数スレッド(スレッドリターン結果)によって返された結果が含まSTD ::将来オブジェクト。
あなたは、メンバ関数のget STDで結果を得ることができます::将来のオブジェクトを()。
std ::は未来がアクセス非同期操作の結果は、結果がすぐに得られないことにメカニズムを提供する、
しかし、スレッドが実行を終了したとき、あなたは結果を得ることができ、将来的には格納されている値で、結果であるオブジェクト、
書式#include <未来>
の#include <リスト>
の#include <マップ>
書式#include <ミューテックス>
書式#include <スレッド>
int型thread_fun()//线程入口函数
{
裁判所未満<< "thread_funスタートなthread_id =" <<はstd :: this_thread :: GET_ID()<<てendl;
std ::クロノ::ミリ秒硬膜(5000); //休息5秒
のstd :: this_thread :: sleep_for(硬膜); //休息一定时长
coutの<< "thread_funエンドなthread_id =" <<はstd :: this_thread :: GET_ID()<< ENDL。
5を返します。
}
メインint型()
{
//はstd ::将来、次のプログラム・オブジェクトは、スレッドの実行とリターン結果の結果を待つ()メンバ関数を取得
coutの<< "主要なthread_id =" <<はstd :: :: this_thread GET_ID()<<てendl;
STD ::将来<整数>結果=のstd ::非同期(thread_fun); // スレッドを作成し、実装を開始
結合関係を、プロセスがここで立ち往生されることはありません
「続行...」<<てendl << COUT;
int型DEF = 0;
coutの<< result.get()<<てendl; // ここに来るであろう最初のカード()、実行thread_funまで待って、戻り値を取得し、その後、スレッド化されたプログラムは、下向き継続されます。
//result.wait();//スレッド戻りを待って、それ自体は結果を返しません。
裁判所未満を<<「エンド...」<<てendl;
リターン0;
}
クラスB
{
パブリック:
INT thread_fun(INT my_mun)//线程入口函数
{
COUT << my_mun << ENDL。
裁判所未満<< "thread_fun開始なthread_id =" <<はstd :: this_thread :: GET_ID()<<てendl;
std ::クロノ::ミリ秒硬膜(5000); //休息5秒
のstd :: this_thread :: sleep_for(硬膜); //休息一定时长
coutの<< "thread_funエンドなthread_id =" <<はstd :: this_thread :: GET_ID()<< ENDL。
5を返します。
}
}
メインint型()
{
A A1;
= 12 intがムンで、
オブジェクトを次//はstd ::将来のプログラムは、()メンバ関数を取得し、待機中のスレッドの実行結果を返すには、結果
はcout << "メインなthread_id =" <<はstd :: this_threadを:: GET_ID()<<てendl;
のstd ::フューチャー<整数>結果=のstd ::非同期(&:: thread_fun、&、NUM); //スレッドを作成し、実装を開始
結合関係を、プロセスがここで立ち往生されることはありません
<< COUT "続行..." <<てendl;
int型DEF = 0;
coutの<< result.get()<<てendl; // ここに来るであろう最初のカード()、実行thread_funまで待って、戻り値を取得し、その後、スレッド化されたプログラムは、下向き継続されます。
//result.wait();//スレッド戻りを待って、それ自体は結果を返しません。
裁判所未満を<<「エンド...」<<てendl;
リターン0;
}