Csharp/C Sharp/Thread/Thread Monitor Manage
Содержание
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>