第三に、スレッドの質量の参加、ピットを切り離し、メンバ関数は、スレッド関数を実行します

まず、一時的なオブジェクトは、パラメータとして渡されたスレッド

各スレッドは彼に数を与えるために、異なる番号が異なるタスクを実行します。

1、1つのトラップ

1の#include <iostreamの>
 2の#include <スレッド> // 线程
3  使用して 名前空間STDを、
4  
5  ボイド PRT(CONSTはint&Iチャー *のBUF){
 6      COUT << I << ENDL。
7      COUT << << BUF ENDL。
8  }
 9  INT メイン(){
 10      INT&A = 1 11      INT&B = 12      チャー mybufは[] = これはテストです13     このmyobjスレッド(PRT、A、mybuf); // 最初のパラメータは関数スレッドの名前で、次のパラメータは、スレッドの関数である
14      )myobj.detach(;
 15      COUT << " 主要エンド" << ENDL;
 16      リターン 0 ;
 17 }

そこスレッド関数のコード上では、変数iへの参照です。コードの12行に子スレッドを作成します。引数は、それが引用渡されたので、私は最初、同じ一つのアドレスでなければなりませんスレッド関数れます。

メインスレッドが完成し実行する場合は、それがリリース、私は子スレッドを訪れるその時だった、とするかどうか間違っていることが?

答えは、子スレッドがiの参照ですが、実際には、スレッドが作成されて作成されたが、参照は本当にここには適用されていない、、、ノースレッドこのmyobjにコピーされますが、コピーではなく、参照しますそれは動作します。だから私はまだ私が別のアドレスに、私へのコピーのコピーので、キルトのスレッドにアクセスすることができます。

しかしmybuf文字列のために、それは安全ではありません。bufがポインタであるので、コンテンツはポインタメモリアドレスである、それがコピーされている場合でも、それは実行のメインスレッドが終わったときにのみ、再びコピーされた内容のメモリアドレスを指し、メモリのアドレスがリリースされている、間違っているとアクセスできません!

どのようにその文字列を渡す方法は?ルックトラップII

2、トラップ2

 

図3に示すように、スレッドID

4、逮捕一時的なオブジェクト構築のタイミング

スレッドスマートポインタパラメータとして第三に、転送クラスオブジェクト

第四に、メンバ関数ポインタパラメータは、スレッドを行います

おすすめ

転載: www.cnblogs.com/pacino12134/p/11228024.html