Csharp/C Sharp/Thread/Thread Monitor Manage

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

Control the main thread

<source lang="csharp"> /* C#: The Complete Reference by Herbert Schildt Publisher: Osborne/McGraw-Hill (March 8, 2002) ISBN: 0072134852

  • /

// Control the main thread.

using System; using System.Threading;

public class UseMain {

 public static void Main() { 
   Thread thrd; 

   // Get the main thread. 
   thrd = Thread.CurrentThread; 

   // Display main thread"s name. 
   if(thrd.Name == null) 
     Console.WriteLine("Main thread has no name."); 
   else 
     Console.WriteLine("Main thread is called: " + 
                        thrd.Name); 

   // Display main thread"s priority. 
   Console.WriteLine("Priority: " + 
                      thrd.Priority); 

   Console.WriteLine(); 

   // Set the name and priority. 
   Console.WriteLine("Setting name and priority.\n"); 
   thrd.Name = "Main Thread"; 
   thrd.Priority = ThreadPriority.AboveNormal; 

   Console.WriteLine("Main thread is now called: " + 
                      thrd.Name); 

   Console.WriteLine("Priority is now: " + 
                      thrd.Priority); 
 } 

}


      </source>


illustrates the use of the Monitor object

<source lang="csharp"> /* Mastering Visual C# .NET by Jason Price, Mike Gunderloy Publisher: Sybex; ISBN: 0782129110

  • /

/*

 Example14_10.cs illustrates the use of the Monitor object
  • /

using System; using System.Threading; public class Example14_10 {

 // a shared counter
 private int Runs = 0;
 // the CountUp method increments the shared counter
 public  void CountUp() 
 {
   while (Runs < 10)
   {
     Monitor.Enter(this);
     int Temp = Runs;
     Temp++;
     Console.WriteLine(Thread.CurrentThread.Name + " " + Temp);
     Thread.Sleep(1000);
     Runs = Temp;
     Monitor.Exit(this);
   } 
 }
 public static void Main() 
 {
   // Make an instance of this class
   Example14_10 ex = new Example14_10();
   // And run the test outside of the static method
   ex.RunThreads();
 }
 public void RunThreads()
 {
   // create and launch two threads
   Thread t2 = new Thread(new ThreadStart(CountUp));
   t2.Name = "t2";
   Thread t3 = new Thread(new ThreadStart(CountUp));
   t3.Name = "t3";
   t2.Start();
   t3.Start();
 }

}


      </source>


Managing Threads

<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 ManagingThreads
 {
   public AutoResetEvent A = new AutoResetEvent(false);
   public AutoResetEvent[] B = new AutoResetEvent[3];
   public static int Main()
   {
     ManagingThreads M = new ManagingThreads();
     M.InitEvents();
     Thread T = new Thread(new ThreadStart(M.MyNewThread));
     T.Start();
     //T.Join();  //Blocks this thread until T Stops
     Console.WriteLine("Waiting!");
     M.A.WaitOne();
     WaitHandle.WaitAll(M.B);
     return 0;
   }
   public void InitEvents()
   {
     for (int i = 0; i < 3; i++)
     {
       B[i] = new AutoResetEvent(false);
     }
   }
   public void MyNewThread()
   {
     Console.WriteLine("MyNewThread Called");
     A.Set();
     B[0].Set();
     B[1].Set();
     B[2].Set();
   }
 }

}

      </source>


Threading Class Monitor

<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.Collections; using System.Threading; namespace Client.Chapter_15___Threading {

 public class ThreadingClassMonitor
 {
   public static Thread ThreadOne = ThreadOne = new Thread(new ThreadStart(MonitorExample));
   public static ArrayList MyList = new ArrayList();
   public ThreadingClassMonitor()
   {
     MyList.Add("Test1");
     MyList.Add("Test2");
   }
   static void Main(string[] args)
   {
     ThreadOne.Start();
   }
   protected static void MonitorExample()
   {
     Monitor.Enter(MyList);
     MyList.Add("Test3");
     Monitor.Exit(MyList);
   }
 }

}

      </source>