Csharp/C Sharp/Thread/Thread Properties
Содержание
Current Thread Properties
<source lang="csharp"> using System; using System.Collections.Generic; using System.Text; using System.Threading; class Program {
static int interval; static void Main(string[] args) { interval = 100; ThreadPool.QueueUserWorkItem(new WaitCallback(StartMethod)); Thread.Sleep(100); ThreadPool.QueueUserWorkItem(new WaitCallback(StartMethod)); Console.ReadLine(); } static void StartMethod(Object stateInfo) { DisplayNumbers("Thread " + DateTime.Now.Millisecond.ToString()); Console.WriteLine("Thread Finished"); } static void DisplayNumbers(string GivenThreadName) { Console.WriteLine("Starting thread: " + GivenThreadName); for (int i = 1; i <= 8 * interval; i++) { if (i % interval == 0) { Console.WriteLine("Count has reached " + i); Console.WriteLine("CurrentCulture: " + Thread.CurrentThread.CurrentCulture.ToString()); Console.WriteLine("IsThreadPoolThread: " + Thread.CurrentThread.IsThreadPoolThread.ToString()); Console.WriteLine("ManagedThreadId: " + Thread.CurrentThread.ManagedThreadId.ToString()); Console.WriteLine("Priority: " + Thread.CurrentThread.Priority.ToString()); Console.WriteLine("ThreadState: " + Thread.CurrentThread.ThreadState.ToString()); Thread.Sleep(1000); } } }
}
</source>
Demonstrate thread priorities
<source lang="csharp"> /* C#: The Complete Reference by Herbert Schildt Publisher: Osborne/McGraw-Hill (March 8, 2002) ISBN: 0072134852
- /
// Demonstrate thread priorities.
using System; using System.Threading;
class MyThread {
public int count; public Thread thrd; static bool stop = false; static string currentName; /* Construct a new thread. Notice that this constructor does not actually start the threads running. */ public MyThread(string name) { count = 0; thrd = new Thread(new ThreadStart(this.run)); thrd.Name = name; currentName = name; } // Begin execution of new thread. void run() { Console.WriteLine(thrd.Name + " starting."); do { count++; if(currentName != thrd.Name) { currentName = thrd.Name; Console.WriteLine("In " + currentName); } } while(stop == false && count < 1000000000); stop = true; Console.WriteLine(thrd.Name + " terminating."); }
}
public class PriorityDemo {
public static void Main() { MyThread mt1 = new MyThread("High Priority"); MyThread mt2 = new MyThread("Low Priority"); // Set the priorities. mt1.thrd.Priority = ThreadPriority.AboveNormal; mt2.thrd.Priority = ThreadPriority.BelowNormal; // Start the threads. mt1.thrd.Start(); mt2.thrd.Start(); mt1.thrd.Join(); mt2.thrd.Join(); Console.WriteLine(); Console.WriteLine(mt1.thrd.Name + " thread counted to " + mt1.count); Console.WriteLine(mt2.thrd.Name + " thread counted to " + mt2.count); }
}
</source>
illustrates the ThreadState property
<source lang="csharp"> /* Mastering Visual C# .NET by Jason Price, Mike Gunderloy Publisher: Sybex; ISBN: 0782129110
- /
/*
Example14_3.cs illustrates the ThreadState property
- /
using System; using System.Threading; public class Example14_3 {
// the Countdown method counts down from 10 to 1 public static void Countdown() { for (int counter = 10; counter > 0; counter--) { Console.Write(counter.ToString() + " "); } Console.WriteLine(); } // the DumpThreadState method displays the current Thread"s state // Note that ThreadState is a bitmask, and multiple states for the // same thread are valid public static void DumpThreadState ( Thread t ) { Console.Write("Current state: "); if ((t.ThreadState & ThreadState.Aborted) == ThreadState.Aborted) Console.Write("Aborted "); if ((t.ThreadState & ThreadState.AbortRequested) == ThreadState.AbortRequested) Console.Write("AbortRequested "); if ((t.ThreadState & ThreadState.Background) == ThreadState.Background) Console.Write("Background "); if ((t.ThreadState & (ThreadState.Stopped | ThreadState.Unstarted | ThreadState.Aborted)) == 0) Console.Write("Running "); if ((t.ThreadState & ThreadState.Stopped) == ThreadState.Stopped) Console.Write("Stopped "); if ((t.ThreadState & ThreadState.StopRequested) == ThreadState.StopRequested) Console.Write("StopRequested "); if ((t.ThreadState & ThreadState.Suspended) == ThreadState.Suspended) Console.Write("Suspended "); if ((t.ThreadState & ThreadState.SuspendRequested) == ThreadState.SuspendRequested) Console.Write("SuspendRequested "); if ((t.ThreadState & ThreadState.Unstarted) == ThreadState.Unstarted) Console.Write("Unstarted "); if ((t.ThreadState & ThreadState.WaitSleepJoin) == ThreadState.WaitSleepJoin) Console.Write("WaitSleepJoin "); Console.WriteLine(); } public static void Main() { // create a second thread Thread t2 = new Thread(new ThreadStart(Countdown)); DumpThreadState(t2); // launch the second thread t2.Start(); DumpThreadState(t2); // and meanwhile call the Countdown method from the first thread Countdown(); // shut down the second thread t2.Abort(); DumpThreadState(t2); }
}
</source>
illustrates the use of thread priorities
<source lang="csharp"> /* Mastering Visual C# .NET by Jason Price, Mike Gunderloy Publisher: Sybex; ISBN: 0782129110
- /
/*
Example14_2.cs illustrates the use of thread priorities
- /
using System; using System.Threading; public class Example14_2 {
// the Countdown method counts down from 1000 to 1 public static void Countdown() { for (int counter = 1000; counter > 0; counter--) { Console.Write(counter.ToString() + " "); } } public static void Main() { // create a second thread Thread t2 = new Thread(new ThreadStart(Countdown)); // set the new thread to highest priority t2.Priority=ThreadPriority.Highest; // Locate the current thread and set it to the lowest priority Thread.CurrentThread.Priority=ThreadPriority.Lowest; // launch the second thread t2.Start(); // and meanwhile call the Countdown method from the first thread Countdown(); }
}
</source>
Use IsAlive to wait for threads to end
<source lang="csharp"> /* C#: The Complete Reference by Herbert Schildt Publisher: Osborne/McGraw-Hill (March 8, 2002) ISBN: 0072134852
- /
using System; // Use IsAlive to wait for threads to end. public class MoreThreads2 {
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"); do { Console.Write("."); Thread.Sleep(100); } while (mt1.thrd.IsAlive && mt2.thrd.IsAlive && mt3.thrd.IsAlive); Console.WriteLine("Main thread ending."); }
}
</source>