1

プログラムでスレッドを使用したことがありますが、join()を使用することはありません。私はjoin()について以下のようなものを得ました

Join will stop the current running thread and let the "Join" thread runs until it finishes.

static void Main()
{
  Thread t = new Thread (Go);
  t.Start();
  t.Join();
  Console.WriteLine ("Thread t has ended!");
}

static void Go()
{
  for (int i = 0; i < 10; i++) Console.Write ("y");
}

上記のコードから、join()がここでどのような重要な役割を果たしているのかわかりません。結合の使用法について話し合ってください。

可能であれば、join()の小さな現実的なコードを教えてください。その結果、join()の適切な使用法を理解できます。

また、join()はマルチスレッド環境で使用できます。ありがとう

4

5 に答える 5

4

投稿したコードを例として使用すると、次のように記述されている場合:

static void Main()
{
  Thread t = new Thread (Go);
  t.Start();
  Console.WriteLine ("Thread t has ended!");
}

static void Go()
{
  for (int i = 0; i < 10; i++) Console.Write ("y");
}

出力は次のようになります。

yyyスレッドtが終了しました!yyyyyyy

Go()同時に実行される意味Console.WriteLine ("Thread t has ended!");

t.join()を追加すると、スレッドが終了するまで待ってから続行します。これは、コードのセクションのみをスレッドと同時に実行する場合に役立ちます。

于 2013-03-27T13:16:22.290 に答える
3

コードアプリケーションからt.Join()を削除すると、Go()メソッドが実行されたことを確認する前に実行が終了します。

同時に実行できるメソッドが2つ以上あるが、それらに依存するメソッドを実行する前に、それらすべてをファイナライズする必要がある場合、結合は非常に便利です。

以下のコードをご覧ください。

static void Main(string[] args)
        {
        Thread t1 = new Thread(Method1);
        Thread t2 = new Thread(Method2);
        t1.Start();
        t2.Start();
        Console.WriteLine("Both methods are executed independently now");
        t1.Join(); // wait for thread 1 to complete
        t2.Join(); // wait for thread 2 to complete
        Console.WriteLine("both methods have completed");
        Method3(); // using results from thread 1 and thread 2 we can execute  method3 that can use results from Method1 and Method2

        }
于 2013-03-27T13:19:37.763 に答える
2

スレッドが終了するまで、呼び出し元のスレッドをブロックします。

注:標準のCOMおよびSendMessageポンピングを実行し続けながら、スレッドが終了するか、指定された時間が経過するまで、呼び出し元のスレッドをブロックすることもできます。によってサポートされています。NETCompactFramework。

リンク: http: //msdn.microsoft.com/fr-fr/library/system.threading.thread.join (v = vs.80).aspx

于 2013-03-27T13:14:27.800 に答える
2

ゲームの例を考えてみましょう。

static void Main()
{
  Thread t = new Thread (LoadMenu);
  t.Start();
  Showadvertisement();
  t.Join();
  ShowMenu();
}

static void LoadMenu()
{
    //loads menu from disk, unzip textures, online update check.
}

static void Showadvertisement()
{
    //Show the big nvidia/your company logo fro 5 seconds
}

static void ShowMenu()
{
   //everithing is already loaded. 
}

重要なのは、2つのスレッドで複数のものを作成できるということですが、ある時点でそれらを同期して、すべてがすでに完了していることを確認する必要があります

于 2013-03-27T13:15:06.937 に答える
0

.Join()呼び出しは、スレッドが終了するまで待機します。つまり、Goメソッドが戻ると、この呼び出しが返されます。

于 2013-03-27T13:12:51.843 に答える