Csharp/C Sharp/Thread/Thread Join

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

Threads:Joining

using System;
using System.Threading;
class ThreadSleeper
{
    int seconds;
    
    private ThreadSleeper(int seconds)
    {
        this.seconds = seconds; 
    }
    
    public void Nap()
    {
        Console.WriteLine("Napping {0} seconds", seconds);
        Thread.Sleep(seconds * 1000);
    }
    
    public static Thread DoSleep(int seconds)
    {
        ThreadSleeper ts = new ThreadSleeper(seconds);
        Thread thread = new Thread(new ThreadStart(ts.Nap));
        thread.Start();
        return(thread);
    }
}
public class OperationsThreadsJoining
{
    public static void Main()
    {
        Thread thread = ThreadSleeper.DoSleep(5);
        
        Console.WriteLine("Waiting for thread to join");
        thread.Join();
        Console.WriteLine("Thread Joined");
    }
}


Use Join()

/*
C#: The Complete Reference 
by Herbert Schildt 
Publisher: Osborne/McGraw-Hill (March 8, 2002)
ISBN: 0072134852
*/

// Use Join(). 
 
using System; 
using System.Threading; 
 
class MyThread { 
  public int count; 
  public Thread thrd; 
 
  public MyThread(string name) { 
    count = 0; 
    thrd = new Thread(new ThreadStart(this.run)); 
    thrd.Name = name; 
    thrd.Start(); 
  } 
 
  // Entry point of thread. 
  void run() { 
    Console.WriteLine(thrd.Name + " starting."); 
 
    do { 
      Thread.Sleep(500); 
      Console.WriteLine("In " + thrd.Name + 
                        ", count is " + count); 
      count++; 
    } while(count < 10); 
 
    Console.WriteLine(thrd.Name + " terminating."); 
  } 
} 
 
// Use Join() to wait for threads to end. 
public class JoinThreads { 
  public static void Main() { 
    Console.WriteLine("Main thread starting."); 
 
    // Construct three threads. 
    MyThread mt1 = new MyThread("Child #1"); 
    MyThread mt2 = new MyThread("Child #2"); 
    MyThread mt3 = new MyThread("Child #3"); 
 
    mt1.thrd.Join(); 
    Console.WriteLine("Child #1 joined."); 
 
    mt2.thrd.Join(); 
    Console.WriteLine("Child #2 joined."); 
 
    mt3.thrd.Join(); 
    Console.WriteLine("Child #3 joined."); 
 
    Console.WriteLine("Main thread ending."); 
  } 
}