Csharp/C Sharp/Thread/Thread Join

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

Threads:Joining

<source lang="csharp">

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");
   }

}

      </source>


Use Join()

<source lang="csharp"> /* 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."); 
 } 

}


      </source>