Einzelnen Beitrag anzeigen

Poolspieler

Registriert seit: 9. Aug 2004
165 Beiträge
 
Delphi 10.3 Rio
 
#11

AW: Anwendung beendet sich nicht (seit XE2)

  Alt 13. Mai 2013, 16:27
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:
Code:
meinThread.free;
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
Andreas
  Mit Zitat antworten Zitat