線程 = 進程中並發執行的代碼片段 (函數/過程)。每進程至少一主線程,可創建多子線程 → 多線程。
| API | 來源 | 關鍵參數 |
|---|---|---|
CreateThread | Windows API | 安全屬性、堆疊大小、起始地址 (線程函數)、參數、創建旗標、線程 ID |
_beginthread | C Runtime | 線程函數、堆疊大小、參數 |
BeginThread | Delphi RTL | 安全屬性、堆疊大小、TThreadFunc、參數、創建旗標、線程 ID |
三者功能同:將函數代碼放入獨立線程執行。啟動函數立即返回,主線程繼續,子線程並發執行至函數結束。
ExitThread (WinAPI) / _endthread (CRT) / EndThread (Delphi RTL)
TThread = class
private
FHandle: THandle; // 線程核心控制代碼
FThreadID: THandle; // 線程 ID
FCreateSuspended: Boolean; // 創建時是否掛起
FTerminated: Boolean; // 終止旗標
FSuspended: Boolean; // 掛起狀態
FFreeOnTerminate: Boolean; // 結束時自動 Free
FFinished: Boolean; // 是否已結束
FReturnValue: Integer; // 返回值
FOnTerminate: TNotifyEvent; // 終止事件
FSynchronize: TSynchronizeRecord; // 同步記錄
FFatalException: TObject; // 捕獲的例外
protected
procedure Execute; virtual; abstract; // 必須覆寫:線程主體代碼
procedure Synchronize(Method: TThreadMethod); // 同步執行於主線程
public
constructor Create(CreateSuspended: Boolean);
destructor Destroy; override;
procedure AfterConstruction; override; // 依旗標 Resume
procedure Resume; procedure Suspend; // 控制執行/掛起 (棄用建議用 Suspended 屬性)
procedure Terminate; // 設置 Terminated=True
function WaitFor: LongWord; // 等待結束並取得返回值
class procedure Synchronize(AThread: TThread; AMethod: TThreadMethod); overload;
// ... 屬性存取器
end;
Execute 為抽象方法,強制子類別實作線程邏輯ThreadProc (全域函數) 定義執行骨架,呼叫虛擬 ExecuteSynchronize 將方法排入主線程佇列,阻塞等待完成FreeOnTerminate、WaitFor、OnTerminate 多種協作模式
type
TMyThread = class(TThread)
protected
procedure Execute; override;
end;
procedure TMyThread.Execute;
begin
// 線程主體代碼
// 需要操作 UI 時:Synchronize(UpdateUI);
end;
// 使用
var T: TMyThread;
begin
T := TMyThread.Create(True); // 掛起創建
T.FreeOnTerminate := True; // 結束自動釋放
T.Start; // 或 T.Resume (舊版)
// 或 T.WaitFor 同步等待
end;
TThread 是 Delphi 對作業系統線程 API 的優雅封裝。理解其從 CreateThread 到 BeginThread 再到 TThread 的演進,以及抽象 Execute + Template Method ThreadProc + Synchronize 同步的核心架構,是編寫健壯多線程程式的基石。