Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Anwendung beendet sich nicht (seit XE2) (https://www.delphipraxis.net/163789-anwendung-beendet-sich-nicht-seit-xe2.html)

Poolspieler 13. Mai 2013 15:27

AW: Anwendung beendet sich nicht (seit XE2)
 
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

Der schöne Günther 13. Mai 2013 15:50

AW: Anwendung beendet sich nicht (seit XE2)
 
Hier mal zum Thema, den Thread nach einer Wartezeit dann mit Gewalt zu beenden falls er es nicht von alleine tut: http://www.delphipraxis.net/173890-w...gewaltsam.html


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:09 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz