1、スレッドの実行が完了するのを待っています
ターゲット・スレッドの呼び出しが完了するまで()メソッドは、いくつかのメインスレッドをブロックします参加し、その直接の子スレッドの関数本体の一部を実行します参加。
2、中断されたスレッド(スリープにスレッド)
使用のstd :: this_thread :: sleep_for或はstd :: this_thread :: sleep_until。
書式#include <スレッド> の#include <iostreamの> の#include <クロノ> 使用して名前空間はstd ::クロノを。空pausable(){ // スリープ500毫秒 のstd :: this_thread :: sleep_for(ミリ秒(500 )); // スリープ到指定时间点 のstd :: this_thread :: sleep_until(SYSTEM_CLOCK ::今()+ミリ秒(500 )); } int型のmain(){ STD ::スレッドのスレッド(pausable)。 thread.join(); リターン0 ; }
3、スレッドの終了
一般的に、スレッド関数の実行が完了すると、スレッド「自然」の停止。デストラクタ:しかし、状況はSTD ::スレッド内のスレッドの異常終了の原因となりますが、それはこれです。スレッドがまだ実行されている場合はstd ::スレッドインスタンスのデストラクタは、スレッドがリソースの漏洩を引き起こす可能性がスワップを終了し、その成功裡の妥結スレッドを確保するためにデストラクタ前に参加しようとすることを余儀なくされた場合。
4、スレッドのコピー
std ::(FOO)を通します。
std ::スレッドB;
B = A。
Bスレッドを与えるために、スレッド管理は、もはや、元のスレッドがある場合は、元のスレッドが破壊されているB、新しいスレッド管理ではありません。
図5に示すように、サブスレッド分離
デタッチ(スレッドはパイプのインスタンスが所有もはや、分離されているので、後は)、スレッドの所有権は、通話に参加することはできません失われません。スレッドの所有権への簡単な方法のスレッドがあるかどうかを判断するには、合流可能関数を呼び出すことがあるそういないがある場合はtrueを返します。
書式#include <スレッド> の#include <iostreamの> 使用して名前空間はstd; // 一个普通的函数のボイド楽しい(int型NUM) { coutの << " ファンクション子スレッドが始まる... \ N " ; 裁判所未満 << " 私は、関数fun()から来る:" << NUM << ' \ nを' ; 裁判所未満 << 「ファンクション子スレッド終了... \ nを」; coutの << てendl; { パブリック: 無効 演算子()(int型数値) { coutの << " クラスの子スレッドが始まる...を\ n " ; 裁判所未満 << " 私はクラスの楽しさから来る:" << NUM << ' \ nを' ; 裁判所未満 << 「クラスの子スレッド終了... \ nを」; coutの << てendl; } }。 INT メイン() { COUT << "「\ N- 」; (cout.sync_with_stdio 真の); // 設定された入力ストリームcoutのスレッドセーフ スレッドT_L(楽しい、1。); // 新しいスレッドを作成し、最初のパラメータは関数ポインタで、2番目のパラメータは関数でありますパラメータ(第2パラメータは、可変長パラメータである) t_1.join(); //は即ち直接関数は、サブスレッドの本体部分参加できる行う目標メインスレッドが完了するまでスレッドを呼び出すメソッドブロックの数、参加 スレッドT_2(楽しいです、2 ); t_2.detach(); // すべてのスレッドをブロックしませんデタッチ方法は、対象のスレッドが常駐がバックグラウンドで実行されている、デーモンスレッドとなっています 。楽しいoFun スレッドT_3(REF、(oFun)3); // ここで新しいスレッドオブジェクトを初期化するために使用される、oFunのREF自体ではなく、そのコピーによってそこに伝送される t_3.join(); COUT << "メインスレッドの終わり... 」 << てendl; リターン 0 ; }