CreateThread 第五個參數 dwCreationFlags 控制執行緒建立後的初始狀態:
0:立即執行。CREATE_SUSPENDED:建立後暫停,需呼叫 ResumeThread 繼續。配合 SuspendThread/ResumeThread 可實現執行緒的動態暫停/繼續,對應 TThread 的 Suspend/Resume 方法(已棄用)。
SuspendThread:計數 +1。ResumeThread:計數 -1(最小為 0)。n 次 SuspendThread,需呼叫 n 次 ResumeThread 才能恢復。unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Button1: TButton; { 建立並掛起 }
Button2: TButton; { 繼續 }
Button3: TButton; { 暫停 }
Timer1: TTimer;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
var
hThread: THandle;
num: Integer; { 共享變數,執行緒寫入,Timer 讀取 }
function MyThreadFun(p: Pointer): Integer; stdcall;
begin
while True do
num := Random(100); { 持續更新 }
Result := 0;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
ID: DWORD;
begin
hThread := CreateThread(nil, 0, @MyThreadFun, nil, CREATE_SUSPENDED, ID);
Button1.Enabled := False;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ResumeThread(hThread);
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
SuspendThread(hThread);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Timer1.Interval := 100; { 100 ms 更新標題 }
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Caption := IntToStr(num);
end;
end.

TThread.Suspend/Resume 同樣棄用,Delphi 10.4+ 編譯器會發出警告。理解 CREATE_SUSPENDED 與掛起計數機制有助於閱讀舊碼,但現代多線程設計應完全避免 SuspendThread,改用協作式同步模式,確保系統穩定與可擴展性。