Hab in meiner Unit einen von TTHread abgeleitet Klasse, welche in FormCreate instanziert wird. Im Konstrukor initialisiert der Thread ein bisschen was und ruft dann die Methode Excecute auf. In der Execute-Methode wiederum läuft ein Codeblock in einer Ebdlosschleife. Diese Schleife soll erst dann beendet werden, wenn die Form geschlossen wird. dazu fange ich das Close-Ereignis ab und rufe darin MyThread.Terminate() auf.
ich dachte das funktioniert, aber sobald ich nochmal starte (über die IDE) kommt folgenden Fehlermeldung:
Zugriffsverletzung bei Adresse XYZ in Modul 'coreide70.bpl'. Lesen von Adresse ZYX.
Ich werd nicht daraus schlau. Ein Speicherleck? Woher?
Edit:
Schwamm drüber. Das Leck muss an meinem OS gelegen haben. Nach neustart kommt keine Fehlermeldung.
Bitte verschieben. Versehntlich falsch gelandet.
Anhang: Wenn ich beim Beenden meines Fensters den laufenden Thread terminieren und dann freigeben will (also die Klasse, die von TThread abgeleitet wurde), dann reagiert das fenster plötzlich nicht mehr. Destruktor ist leer.
Delphi-Quelltext
1: 2: 3: 4: 5:
| procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin MyThread.Terminate(); MyThread.Free(); end; |
Moderiert von
Peter Lustig: PHP- durch Delphi-Tags ersetzt
Moderiert von
Udontknow: Beiträge zusammengefasst, Thread verschoben