Delphi - Több szálú alkalmazás készítése a külön szál megszakítási lehetőségével

forráskód letöltése
Mellékelt alkalmazásunkban készítünk egy olyan szálat, mely folyamatosan fut és biztosítjuk a felhasználó számára annak lehetőségét, hogy ennek a szálnak a futását bármikor megszakíthassa.
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;