TThread 是 C++Builder 封裝 Windows 執行緒 API 的抽象基類,讓開發者以物件導向方式建立、管理多執行緒應用。正確使用多執行緒能提升回應性、發揮多核效能,但也帶來同步化、資源競爭等挑戰。本文詳細說明架構、屬性、方法與最佳實踐。
TObject
└── TThread (abstract)
每個衍生類別的實例代表一條獨立執行緒。應用程式啟動時為單一進程、單一主執行緒(VCL 主執行緒),透過建立 TThread 子類別實例來增加執行緒。
| 屬性 | 型別 | 說明 |
|---|---|---|
| FreeOnTerminate | bool | true 時執行緒結束自動釋放物件記憶體 |
| Handle | THandle | Windows 執行緒核心控制代碼 |
| Priority | TThreadPriority | 優先級(tpIdle ~ tpTimeCritical) |
| ReturnValue | int | 執行緒函數返回值(WaitFor 取得) |
| Suspended | bool | true 時建立後暫停,需呼叫 Resume |
| Terminated | bool | 外部要求結束旗標,Execute 中需定期檢查 |
| ThreadID | DWORD | 系統全域唯一執行緒識別碼 |
| 方法 | 說明 |
|---|---|
| Execute() | 純虛函數,衍生類別必須實作,執行緒主體程式碼 |
| Create(bool CreateSuspended) | 建構子,true 為暫停狀態建立 |
| Resume() / Suspend() | 恢復/暫停執行緒(已棄用,易造成死結) |
| Terminate() | 設定 Terminated = true,不強制結束 |
| WaitFor() | 阻塞等待執行緒結束,回傳 ReturnValue |
| Synchronize(TThreadMethod Method) | 在主 VCL 執行緒執行指定方法(安全存取 UI) |
| DoTerminate() | 內部呼叫,觸發 OnTerminate 事件 |
| 事件 | 觸發時機 |
|---|---|
| OnTerminate | Execute 返回、物件銷毀前 |
File → New → Thread 自動產生單元與骨架MyThread* t = new MyThread(true);(暫停建立)t->FreeOnTerminate = true; t->Priority = tpNormal;t->Resume(); 或建構子傳 falset->WaitFor();void __fastcall MyThread::Execute() {
while (!Terminated) { // 定期檢查結束旗標
// 1. 執行耗時運算、I/O、網路等
ProcessData();
// 2. 若需更新 UI,必須用 Synchronize
Synchronize(&UpdateUI);
// 3. 適度睡眠避免佔滿 CPU
Sleep(10);
}
ReturnValue = 0; // 設定返回值
}
void __fastcall MyThread::UpdateUI() {
// 此處安全存取 VCL 元件
Form1->ProgressBar->Position = ProgressPercent;
Form1->Memo->Lines->Add("Step completed");
}
Synchronize 或 Queue(非阻塞)進行TCriticalSection、TMutex、TSemaphore、TEvent 保護臨界區Execute 內部例外不會傳播到主執行緒,需自行 try-catch 並記錄std::thread + std::mutex / std::condition_variablestd::async / std::future 簡化非同步運算std::atomic 輕量級無鎖同步TThread 是 VCL 時代多執行緒的基石,掌握其生命週期、同步機制與 UI 安全存取原則至關重要。隨著現代 C++ 標準庫成熟,新專案應逐步遷移至 <thread> 體系,享受型別安全、可攜性與更豐富的同步原語。