在 Delphi 多執行緒程式設計中,TThread 是一個抽象基底類別,繼承自 TObject。開發者必須建立 TThread 的子類別,每個子類別的實例即代表一個獨立的執行緒。透過建立多個 TThread 衍生類別的實例,即可構成完整的 Delphi 多執行緒應用程式。
當應用程式執行時,它會被載入記憶體成為一個進程,包含一個或多個執行緒。每個執行緒擁有獨立的資料、程式碼與系統資源,並由作業系統排程分配 CPU 時間。同一進程內的所有執行緒共享相同的位址空間,可存取進程的全域變數。
File | New | Thread 選單項目,建立繼承自 TThread 的新單元Create 建構函式Execute 方法,撰寫執行緒執行時所需的核心程式碼Synchronize 方法中,避免多執行緒衝突| 屬性 | 說明 |
|---|---|
FreeOnTerminate | 執行緒終止時,物件是否自動刪除(預設 False,需手動釋放) |
Handle | 執行緒控制代碼,呼叫 Win32 API 處理執行緒時使用 |
Priority | 執行緒相對優先級(tpIdle 至 tpTimeCritical 七個等級) |
ReturnValue | 執行緒回傳值,供 WaitFor 方法取得 |
Suspended | 指示執行緒是否暫停;True 暫停,False 繼續 |
Terminated | 標記執行緒被要求終止;Terminate 方法會將此屬性設為 True |
ThreadID | 系統層級的執行緒唯一識別碼,不同於 Handle |
| 值 | 含義 |
|---|---|
| tpIdle | 系統閒置時才執行 |
| tpLowest | 比正常低 2 點 |
| tpLower | 比正常低 1 點 |
| tpNormal | 正常優先級(預設) |
| tpHigher | 比正常高 1 點 |
| tpHighest | 比正常高 2 點 |
| tpTimeCritical | 最高優先級,即時關鍵任務 |
| 方法 | 說明 |
|---|---|
~TThread | 解構函式,刪除物件並釋放記憶體;應用程式勿直接呼叫,改用 delete |
DoTerminate | 觸發 OnTerminate 事件,不終止執行緒本身 |
Execute | 抽象方法,需在衍生類別中實作執行緒核心邏輯;應定期檢查 Terminated 屬性 |
Resume | 恢復暫停的執行緒;可巢狀呼叫,需注意呼叫順序 |
Suspend | 暫停執行中的執行緒;需搭配 Resume 使用 |
Synchronize | 在主 VCL 執行緒中安全執行指定方法;呼叫期間目前執行緒會暫停 |
Terminate | 將 Terminated 設為 True,通知執行緒結束 |
TThread(CreateSuspended) | 建構函式;CreateSuspended=False 立即執行,True 需呼叫 Resume |
WaitFor | 等待執行緒終止並回傳 ReturnValue;主執行緒勿呼叫,否則可能死結 |
OnTerminate:執行緒的 Execute 方法返回且物件被刪除前觸發。事件處理常式在主 VCL 執行緒中執行,可在此釋放執行緒物件。
Synchronize 包裝Terminated,為 True 時主動結束