![]() |
Anwendung terminiert manchmal nicht
Hi,
seit längerem bemerke ich, dass meine Anwendung sporadisch nicht terminiert. Ich starte sie, warte kurz, ohne etwas zu machen, schließe die Anwendung und lande wieder in Delphi, also alles wie es sein soll. Nun kommt es aber vor, dass ich genau den gleichen Weg gehe, aber die Anwendung, nach dem "Beenden" weiter läuft und ich explizit über den Stopp-Knopf die Anwendung anhalten muss. Jetzt hab ich leider keine Ahnung, wo ich anfangen soll bzw. wie ich das Gebiet zum Suchen eingrenzen soll. Hat jemand ein Tipp, wie man vorgehen könnte? Vielleicht liegt es ja an den Komponenten. Ich nutze die Ribbons (die, die bei Delphi 2009 dabei sind), AnyDAC (Remoteverbindung zu einem MySQL-Server), ansonsten nichts spezielles. Grüße |
Re: Anwendung terminiert manchmal nicht
Hi!
Machst du irgendwas beim Beenden? Also so in FormClose o.ä.? Ohne Quellcode wird die Suche wahrscheinlich schwierig... Ciao, Frederic |
Re: Anwendung terminiert manchmal nicht
Am Besten mal im Debugger ansehen
|
Re: Anwendung terminiert manchmal nicht
Hi,
beim Beenden werden nur ein paar belanglose Objekte zerstört und die Verbindung zur Datenbank getrennt:
Delphi-Quellcode:
Markus: Das hatte ich schon versucht. Es läuft eine Zeile nach Application.Run (also auf das end.) und dann passiert nichts mehr.
destructor TtlDatabase.Destroy;
begin if (FConnection.Connected) then Disconnect; FreeAndNil(FConnection); inherited; end; |
Re: Anwendung terminiert manchmal nicht
Setze mal in dem Konstruktor ein Breakpoint und setzte im Einzelschritt fort ( F7)
|
Re: Anwendung terminiert manchmal nicht
Hi,
ich hab mich mal durch den kompletten Destroy-Vorgang gewurschtelt und hab, so glaube ich, die Zeile gefunden:
Delphi-Quellcode:
Es geht um die Zeile mit dem WaitForSingleObject, die dauert immer unterschiedlich lange und manchmal sehr lange. Das Timeout steht auf 10000.
if lThread then begin
if AWaitForClose then begin lTimeOut := WaitForSingleObject(GClosedEvent, C_AD_PhysManagerShutdownTimeout) = WAIT_TIMEOUT; CloseHandle(GClosedEvent); GClosedEvent := 0; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz