Meiner Meinung nach macht ein Thread nur Sinn, wenn Du eine wiederholende Arbeit damit ausführst, sonnst kann man nämlich eine normales Objekt mit Methode für die Verarbeitung verwenden. Ich gehe mal davon aus dass Du auf einer Maschine mit nur einem Prozessor arbeitets, also eigentlich sowieso alles sequentiell abläuft.
Dann sollte eine Execute Methode so aussehen:
Delphi-Quellcode:
procedure TMeinThread.execute;
var
i: integer;
begin
while not terminated do
begin
form1.Memo1.Lines.Add(inttostr(i));
i := i + 1;
sleep(500);
end;
end;
Von der logik her wird das System die While .. do Schleife solange durchlaufen, bis die Bedingung termineted auf true gesetzt wird.
Wenn nun von aussen die Methode suspend aufgerufen wird, hält der Thread genau an der Zeile an, wo er gerade war. Im obigen Fall wird das mit 99.99% Wahrscheinlichkeit bei der Zeile sleep(500) der Fall sein.
Falls Du an einer bestimmten stelle immer anhalten möchtest kannst Du Dir einfach folgendes Hilfskonstrukt in die execute Methode einbauen:
Delphi-Quellcode:
[b]procedure TMeinThread.SetSuspend;
begin
SuspendRequested:=true;
end;[/b]
procedure TMeinThread.execute;
var
i: integer;
begin
while not terminated do
begin
[b]form1.Memo1.Lines.Add(inttostr(i));[/b]
if SuspendRequested then suspend;
i := i + 1;
sleep(500);
end;
end;
Bei der Anweisung Terminate musst Du ebenfalls beachten, dass der Thread nicht sofort beendet wird, sondern lediglich das Property Termineted auf True gesetz wird. Somit läuft die Execute Methode nochmal bis zum Ende durch. Könnte unerwünschte Nebeneffekte haben.
Wenn Du FreeonTerminate auf True setzt um alles nachher aufgeräumt zu haben, solltest Du beachten, dass Threads die suspended sind niemals freigegeben werden, da die execute methode nicht zu ende laufen kann.
Dies müsstest Du ebenfalls selber ausprogrammieren, indem Du bei Terminate einen suspendeten Tread zuerst wieder resumest, damit er zuende laufen kann. Achtung bei verschachtelten Suspends, diese müssen ALLE wieder mit resume aufgehoben werden.
Hoffe das hilft Dir ein Bisschen weiter.
Viele Grüsse