@SyntaxXx
Wenn du Delphi-Code postest, dann benutze bitte die Delphi-Tags
für sonstigen Code die Code-Tags
sonst krieg ich hier Augenkrebs
Code:
procedure SiehtDoofAus;
begin
// Ja ganz doof
end;
Delphi-Quellcode:
procedure SiehtVielBesserAus;
begin
// Ja viel besser
end;
Nach über 100 Beiträgen solltest du das eigentlich wissen und es ist lediglich ein Knöppeschen weiter
(und eine anständige Formatierung/Einrückung sollte auch drin sein)
Nun zu deiner Frage:
- In der Execute-Methode hast du keine Abbruchbedingung definiert until Terminated;
- Thread ist als lokale Variable in der procedure definiert. Ausserhalb der procedure kann auf diese nicht zugegriffen werden und beim erneuten Aufrufen der procedure ist der Wert undefiniert (auf jeden Fall nicht mehr mit einem vernünftigen Wert gefüllt)
Deklariere in der Form eine entsprechende Thread-Variable
Delphi-Quellcode:
type
TFooForm = class( TForm )
...
private
Thread : MyThread;
...
end;
und den Rest so
Delphi-Quellcode:
procedure MyThread.Execute;
begin
repeat
Synchronize(Form1.FillMemo);
until Terminated;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if Assigned( Thread ) then
begin
Thread.Terminate;
Thread := nil;
end
else
begin
Thread := MyThread.Create(true);
Thread.Priority := tpLowest;
Thread.FreeOnTerminate := true;
Thread.Resume;
end;
end;
Jetzt wird mit jedem Klick auf den Button1 der Thread gestartet und auch wieder angehalten
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ea 0a 4c 14 0d b6 3a a4 c1 c5 b9
dc 90 9d f0 e9 de 13 da 60)