- 一個執行緒只屬於一個處理序,而一個處理序可以有多個執行緒,或至少有一個執行緒。
- 資源分配給處理序,在同一個處理序的所有執行緒共用該處理序的所有資源。
- 處理器分給執行緒,即真正在處理器上運行的是執行緒。
- 執行緒在執行過程中,需要協作同步。不同的執行緒間可利用訊息通訊的辦法實作同步。
1.啟動一個處理序
Public static void Main( )
{
Process p = new Process ( ) ;
p.StartInfo.FileName = "notepad.exe" ; //設置需要啟動處理序的名稱
p.StartInfo.WindowsStyle = ProcessWindowsStyle.Maximized; //在設定啟動處理序時,新視窗的顯示樣式
p.Start ( ) ;//開始啟動處理序
}
2.關閉一個處理序
Public static void Main( )
{
Process [ ] p = Process.GetProcessesByName ("notepad") ;
if (p.Length > 0 )
{
if ( !p [0].HasExited) //用來確定處理序是否關閉,假如已經關閉則回傳true屬性值,否則為false
{
if ( p[0].Responding) //發送一個請求介面,假如立即有回應則回傳一個true
{
p[0].CloseMainWindow ( ) ; //叫用 CloseMainWindows方法關閉應用程式
}
else
{
p[0].Kill ( ) ;//若沒有回應則叫用Kill方法強制處理序關閉。
}
}
}
}
3.獲得目前電腦系統內所有已啟動的處理序
Public static void Main ( )
{
Process [ ] processOnComputer = Process.GetProcesses ( ) ;
foreach (Process p in processOnComputer)
{
Console.WriteLine (p.ToString ( ) );
}
}
4.簡單的執行緒例子
using System ;
using System.Threading ;
namespace Test_Thread
{
public class Test
{
public static void ThreadA ( )
{
for (int i = 0 ; i < 3 ; i++ )
{
Console.WriteLine ( "執行緒 A : {0} ", i ) ;
}
}
public static void ThreadB ( )
{
for (int i = 0 ; i < 3 ; i++ )
{
Console.WriteLine ("執行緒B : {0} ", i ) ;
}
}
public static void Main ( )
{
Console.WriteLine ("開始啟動執行緒 :") ;
Thread a = new Thread (new ThreadStart (ThreadA)) ;
Thread b = new Thread (new ThreadStart (ThreadB)) ;
//叫用Start ( )可以啟動執行緒,但是叫用Start ( )之後,新執行緒並不處於Running狀態,而是處於Unstarted狀態。作業系統的執行緒調度器選擇了要運行的執行緒之後,執行緒才會改變為Running狀態。
a.Start ( ) ;
b.Start ( ) ;
}
}
}
沒有留言:
張貼留言