Hallo,
wenn Du keine TThreadList hast, dann wirst Du ja wahrscheinlich im onClose-Ereignis des Hauptfensters Deine Threads (oder die Klasse drüber) freigeben.
Und dort wirst Du ja sowas wie:
aufrufen.
--> Und die destroy-Routine wartet so lange, bis der Thread beendet ist.
Und im Thread steht ja wahrscheinlich sowas in der Art:
Code:
procedure TmeinThread.Execute;
begin
inherited;
while not Terminated do begin
if signal_mach_was then begin
// hier wird irgendwas gemacht --> und wenn das zu lange dauert --> dann hängt Deine Anwendung beim Schließen...
end;
sleep(1);
end;
end;
.Free ruft .destroy auf.
In der Delphi-Hilfe steht zu .destroy:
Zitat:
Gibt das Thread-Objekt frei.
Rufen Sie Destroy in einer Anwendung nicht direkt auf. Verwenden Sie stattdessen Free zur Freigabe eines Threads, wenn die Eigenschaft FreeOnTerminate den Wert false hat.
Destroy veranlasst die Beendigung des Threads und wartet auf eine entsprechende Bestätigung. Danach wird die geerbte Methode Destroy aufgerufen.
Interessant dürfte vor allem der letzte Satz für Dich sein...
Viele Grüße,
Poolspieler