セイC ++ 11マルチスレッドの非同期、将来、packaged_task、約束の第九


(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;
    
}
 

公開された101元の記事 ウォン称賛73 ビュー120 000 +

おすすめ

転載: blog.csdn.net/usstmiracle/article/details/104447919