Delphi-PRAXiS
Seite 1 von 3  1 23   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Programmprozess läuft weiter, obwohl "Windows"-Kreuz gedrück (https://www.delphipraxis.net/96563-programmprozess-laeuft-weiter-obwohl-windows-kreuz-gedrueck.html)

litotes 26. Jul 2007 22:00


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...

Bernhard Geyer 26. Jul 2007 22:05

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?

litotes 26. Jul 2007 22:09

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

Whookie 26. Jul 2007 22:37

Re: Programmprozess läuft weiter, obwohl "Windows"
 
Verwendest Du irgentwelche Schleifen, die nicht enden _könnten_ und in denen Du ProcessMessages aufrufst?

Luckie 26. Jul 2007 22:46

Re: Programmprozess läuft weiter, obwohl "Windows"
 
Was steht in OnClose, OnCloseQuery, OnDestroy?

Christian Seehase 26. Jul 2007 22:47

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?

Bernhard Geyer 26. Jul 2007 22:48

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.

litotes 27. Jul 2007 09:18

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:
  If HotKeySet then
      UnRegisterHotKey(Self.Handle, HotKeyID);
2. Es gibt 2x processMessages, einmal in einer Dateisuche, und dann in einem Test,
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:
Screen.ActiveForm.Release;
freigegeben.

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:
Screen.ActiveForm.Release;
Das sieht so aus, dass bei jedem Formularwechsel folgendes passiert in onHide:
Delphi-Quellcode:
speicherfreigeben();
und in einem Formular sind alle Methoden gesammelt. Dort ist auch 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

hoika 27. Jul 2007 09:25

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

litotes 27. Jul 2007 09:28

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 15:59 Uhr.
Seite 1 von 3  1 23   

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