Csharp/C Sharp/Thread/Thread Sleep

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

Thread sleep demo

<source lang="csharp">

  using System;
  using System.Threading;
  class ThreadTester
  {
     static void Main( string[] args )
     {
        MessagePrinter printer1 = new MessagePrinter();
        Thread thread1 = new Thread ( new ThreadStart( printer1.Print ) );
        thread1.Name = "thread1";
        MessagePrinter printer2 = new MessagePrinter();
        Thread thread2 = new Thread ( new ThreadStart( printer2.Print ) );
        thread2.Name = "thread2";
        MessagePrinter printer3 = new MessagePrinter();
        Thread thread3 = new Thread ( new ThreadStart( printer3.Print  ) );
        thread3.Name = "thread3";
        Console.WriteLine( "Starting threads" );
        thread1.Start();
        thread2.Start();
        thread3.Start();
        Console.WriteLine( "Threads started\n" ); 
     } 
  }
  class MessagePrinter {
     public void Print() 
     {
        Thread current = Thread.CurrentThread; 
        Console.WriteLine(current.Name + " going to sleep" );
        Thread.Sleep ( 4000 );
        Console.WriteLine( current.Name + " done sleeping" );
     } 
  }


      </source>


Thread Test: Sleep Interupt Resume

<source lang="csharp"> /*

* C# Programmers Pocket Consultant
* Author: Gregory S. MacBeth
* Email: gmacbeth@comporium.net
* Create Date: June 27, 2003
* Last Modified Date:
* Version: 1
*/

using System; using System.Threading; namespace Client.Chapter_15___Threading {

 public class ThreadTestSleepInteruptResume
 {
   public static int Main()
   {
     Thread X = new Thread(new ThreadStart(SecondThread));
     X.Start();
     //Cause the second thread to resume
     X.Interrupt();
     //Place the second thread in a suspended state
     X.Suspend();
     //do some work and restart the thread
     X.Resume();
     //force this thread to wait until the seond thread is finished
     X.Join();
     return 0;
   }
   public static void SecondThread()
   {
     Console.WriteLine("Running second thread");
     //Place the second thread a sleep infinitly
     try
     {
       Thread.Sleep(Timeout.Infinite);
     }
     catch (ThreadInterruptedException e)
     {
       Console.WriteLine("Thread Interupted");
     }
     catch(ThreadAbortException e)
     {
       Thread.ResetAbort();
     }
   }
 }

}

      </source>