Ich bin aber ehrlich gesagt immer noch nicht ganz zufrieden mit der Sache. Folgendes Beispiel, einmal ein Piep-Thread, und ein Piep-Task.
Delphi-Quellcode:
unit Unit3;
interface uses
System.Classes,
Vcl.Controls,
Vcl.Forms,
Vcl.StdCtrls;
type
TForm3 =
class(TForm)
startTaskButton: TButton;
startThreadButton: TButton;
procedure startTaskButtonClick(Sender: TObject);
procedure startThreadButtonClick(Sender: TObject);
end;
var
Form3: TForm3;
implementation uses System.Threading, System.SysUtils;
{$R *.dfm}
procedure proc();
const
maxCount = 10;
var
count: Integer;
begin
count := 0;
repeat
Beep();
Inc(count);
Sleep(500);
until (count = maxCount);
end;
procedure TForm3.startTaskButtonClick(Sender: TObject);
begin
TTask.Run(proc);
end;
procedure TForm3.startThreadButtonClick(Sender: TObject);
begin
TThread.CreateAnonymousThread(proc).Start();
end;
end.
Einmal Button drücken, dann Anwendung beenden. Der Thread wird durch
Halt
vernünftig vorzeitig beendet. Der Task arbeitet seine zehn Piepser immer ab.
Ausprobiert mit XE7. Ist das mit 10 Seattle immer noch so? Ich finde das ehrlich gesagt gruselig.