![]() |
Programmprozess läuft weiter, obwohl "Windows"-Kre
Hallo,
folgendes Problem: Meine Anwendung hat einen programmierten Ende-Button, der auch tadellos funktioniert. Aber wenn man auf das Windows-eigene Beenden klickt (Kreuz rechts oben), dann schließt zwar mein Programm, der Prozess läuft aber weiter. Was deswegen schlecht ist, weil ich einen Mutex eingebaut habe, der einen Doppelstart verhindert. Wenn aber der Prozess noch läuft, lässt sich mein Programm demnach nicht mehr starten, obwohl es ja scheinbar geschlossen ist. Eine Forumssuche hat leider nichts gebracht. Details zum Programm reiche ich gerne nach, falls gebraucht, sie sollten aber - da das doch ein Windows-Prozess ist - nichts damit zu tun haben, oder?? Wer hat eine Idee, woran das liegen könnte? Vielen Dank für die Hilfe schon mal, litotes /edit: Der "vergessene" Prozess im Taskmanager bleibt übrigens nicht immer drin, manchmal beendet er auch sauber... |
Re: Programmprozess läuft weiter, obwohl "Windows"
Hast du evtl. noch einige Funktionen oder Threads laufen so das der Prozess die "Endabarbeitung" nicht durchfühen kann?
Sind irgendwelche Verbindungen (DB/ActiveX/OpenGL/...) aktiv die (in eingebundenen DLL's) u.U. nicht beendet werden können? |
Re: Programmprozess läuft weiter, obwohl "Windows"
Hallo,
eben nicht: keine dlls eingebunden, keine Datenbankverbindung, usw. Es werden zwar Programme gestartet, wie Word, Adobe Reader, IE, usw., aber der Prozess bleibt auch schon nach Klicken des Kreuzes im ersten Schirm hängen, wenn es diese Formulare und Aktionen noch gar nicht gibt, da sie dynamisch während der Laufzeit erzeugt werden... litotes |
Re: Programmprozess läuft weiter, obwohl "Windows"
Verwendest Du irgentwelche Schleifen, die nicht enden _könnten_ und in denen Du ProcessMessages aufrufst?
|
Re: Programmprozess läuft weiter, obwohl "Windows"
Was steht in OnClose, OnCloseQuery, OnDestroy?
|
Re: Programmprozess läuft weiter, obwohl "Windows"
Moin litotes,
und noch eine Möglichkeit: Erzeugst du vielleicht eine grössere Menge von Objekten, so dass das Aufräumen einfach viel Zeit in Anspruch nimmt, bevor sich der Prozess beendet? |
Re: Programmprozess läuft weiter, obwohl "Windows"
Starte doch die App von der IDE mit Debug-DCU's und drück mal nach ein paar Sekunden "unsichtbarkeit" den Pause-Button und schau mal wo du landest.
|
Re: Programmprozess läuft weiter, obwohl "Windows"
Guten Morgen,
erstmal vielen Dank für die vielen Vorschläge. Im Einzelnen: 1. es gibt kein onclose, kein onclosequery, nur ein destroy:
Delphi-Quellcode:
2. Es gibt 2x processMessages, einmal in einer Dateisuche, und dann in einem Test,
If HotKeySet then
UnRegisterHotKey(Self.Handle, HotKeyID); ob ein Programm läuft. Aber auch diese Formulare werden erst zu einem Zeitpunkt erzeugt, an dem das Programm schon längst über das Kreuz beendet ist (eben nach erstem Schirm) 3. Ich erzeuge kaum Objekte (siehe 2), denn jedes Formular bis auf die ersten 3 werden erst zur Laufzeit jeweils erzeugt und dann immer mit
Delphi-Quellcode:
freigegeben.
Screen.ActiveForm.Release;
4. Wenn ich nach ein paar Sekunden der "Unsichtbarkeit" den Pause-Button drücke, dann lande ich tatsächlich in (siehe 3) dem
Delphi-Quellcode:
Das sieht so aus, dass bei jedem Formularwechsel folgendes passiert in onHide:
Screen.ActiveForm.Release;
Delphi-Quellcode:
und in einem Formular sind alle Methoden gesammelt. Dort ist auch speicherfreigeben(); :
speicherfreigeben();
Delphi-Quellcode:
procedure speicherfreigeben();
begin try Screen.ActiveForm.Release; except ShowMessage('Ein schwerwiegender Fehler ist aufgetreten. #13#10Das Programm wird geschlossen. #13#10 Bitte starten Sie es neu.'); Application.Terminate; end; end; Und Formulare werden so gewechselt:
Delphi-Quellcode:
hide;
F_Hier_Starten := TF_Hier_Starten.create(Application); F_Hier_Starten.show; Vielleicht hilft euch das weiter... Vielen Dank, litotes |
Re: Programmprozess läuft weiter, obwohl "Windows"
Hallo,
aha, du versteckst das mainform und erzeugst ein anderes ? Dann klickst du auf das Kreuz des "anderen" und wunderst dich, dass das versteckte mainform immer noch da ist ... Heiko |
Re: Programmprozess läuft weiter, obwohl "Windows"
Hallo Hoika,
bin nicht sicher, ob ich dich verstehe, aber die "Mainform", also die erste die erzeugt wird, wird ja nicht nur versteckt (hide), sondern mit Release zerstört. Ausserdem passiert das ganze ja schon, bevor ich sie verstecke, also so: 1. Programmstart (3 Formulare werden erzeugt) 2. Das erste Formular erscheint. 3. Ich drücke auf das Windows-Kreuz 4. Programm schließt, Prozess ist aber noch im Taskmanager. litotes |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:27 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