Létrehozunk egy új osztályt a TThread-ből származtatva, melyben felülírjuk az Execute eljárást és létrehozunk egy IncreaseNumber eljárást, mely egy számlálót folyamatosan növel és ennek aktuális értékét a Form-on lévő Label komponensen megjeleníti.
TThreadTest = class(TThread)
protected
constructor Create;
procedure Execute; override;
procedure IncreaseNumber;
end;
Az FCanceled logikai típusú változónak a szál létrehozása előtt hamis értéket adunk, majd amikor a változó igaz értéket kap, akkor kell a szál futását megszakítani. Ezt követően létrehozzuk a szálat.
procedure TForm1.Button1Click(Sender: TObject);
begin
FCanceled:=false;
TThreadTest.Create;
Button1.Enabled:=false;
end;
Az FCanceled változó a második gomb lenyomásakor kap igaz értéket, így a felhasználó bármikor megszakíthatja a szál futását.
procedure TForm1.Button2Click(Sender: TObject);
begin
FCanceled:=true;
end;
Az újonnan létrehozott szálban elindítunk egy While ciklust, mely addig fut, amíg az FCanceled változó értéke nem vált igazra. Amíg ez nem történik meg, addig a Synchronize eljáráson keresztül folyamatosan meghívjuk az IncreaseNumber függvényünket.
procedure TThreadTest.Execute;
begin
with Form1 do begin
while not FCanceled do begin
Synchronize(IncreaseNumber);
end;
end;
end;
Ez a függvény a Form-on lévő Label komponens értékét minden egyes hívásakor eggyel növeli.
procedure TThreadTest.IncreaseNumber;
begin
with Form1 do begin
Label1.Caption:=IntToStr(StrToInt(Label1.Caption)+1);
Label1.Update;
end;
end;