首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi TThread 線程類深度解析 (一):從 Windows API 到 VCL 封裝的多線程編程基礎架構

     編輯:Delphi

線程本質

線程 = 進程中並發執行的代碼片段 (函數/過程)。每進程至少一主線程,可創建多子線程 → 多線程。

底層 API 比較

API來源關鍵參數
CreateThreadWindows API安全屬性、堆疊大小、起始地址 (線程函數)、參數、創建旗標、線程 ID
_beginthreadC Runtime線程函數、堆疊大小、參數
BeginThreadDelphi RTL安全屬性、堆疊大小、TThreadFunc、參數、創建旗標、線程 ID

三者功能同:將函數代碼放入獨立線程執行。啟動函數立即返回,主線程繼續,子線程並發執行至函數結束。

線程結束方式

  • 函數自然返回
  • ExitThread (WinAPI) / _endthread (CRT) / EndThread (Delphi RTL)
  • OS 內部建立線程物件 (Kernel Object),結束時需釋放控制代碼

VCL 封裝:TThread 類別架構


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;

核心設計模式

  1. 抽象基類:Execute 為抽象方法,強制子類別實作線程邏輯
  2. Template Method:ThreadProc (全域函數) 定義執行骨架,呼叫虛擬 Execute
  3. 同步封裝:Synchronize 將方法排入主線程佇列,阻塞等待完成
  4. 生命週期管理: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;

進階主題預告 (下篇)

  • 建構子/ThreadProc 完整源碼走讀
  • Interlocked 原子操作與線程安全計數
  • Synchronize 內部佇列機制
  • 例外捕獲與 FFatalException
  • WaitFor/SyncEvent 等待機制

總結

TThread 是 Delphi 對作業系統線程 API 的優雅封裝。理解其從 CreateThread 到 BeginThread 再到 TThread 的演進,以及抽象 Execute + Template Method ThreadProc + Synchronize 同步的核心架構,是編寫健壯多線程程式的基石。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved