Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Programm beenden Task im Task Manager weiter vorhanden??? (https://www.delphipraxis.net/115008-programm-beenden-task-im-task-manager-weiter-vorhanden.html)

steewan 4. Jun 2008 11:27


Programm beenden Task im Task Manager weiter vorhanden???
 
Hallo,

habe gerade ein Problem und weiß gar nicht, wie ich es debuggen soll. Habe auch shcon im Forum nach ähnlichen Themen gesucht, aber nichts gefunden.

Mein Programm kann ich im Hauptbild über eine Tastenkombination mit Application.Terminate beenden, der Bildschirm wird auch geschlossen und es verschwindet aus der Taskbar. Jedoch bleibt die Instanz weiterhin im Taskmanager als Prozess am laufen. Wieso wird es nicht suaber beendet? Weiß leider nicht weiter.

Wenn ich das ganze aus der Delphi IDE starte, so wird auch das Fenster geschlossen, jedoch steht in der Titelleiste weiterhin "Ausführen von". Wenn ich den Prozess anhalte, so passiert gar nichts. Ich benutze Delphi 7 und Windows XP. Der Effekt tritt auch erst seit kurzem auf, davor funktionierte es wunderbar. Ich habe auch schon die Änderungen kontrolliert, aber noch nichts gefunden.

Schon einmal vielen Dank für die Hilfe

Stefan

Sharky 4. Jun 2008 11:30

Re: Programm beenden Task im Task Manager weiter vorhanden??
 
Zitat:

Zitat von steewan
... Wieso wird es nicht suaber beendet? Weiß leider nicht weiter. ...

Hai Stefan,

der Hauptgrund dürfte wohl der sein das man sein Programm mit Delphi-Referenz durchsuchenApplication.Terminate eben nicht sauber beendet.

WIng2005 4. Jun 2008 11:32

Re: Programm beenden Task im Task Manager weiter vorhanden??
 
probiers mal einfach mit close();

MFG
Steffen

steewan 4. Jun 2008 13:47

Re: Programm beenden Task im Task Manager weiter vorhanden??
 
Hallo Steffen,

habe es auch mit Close() probiert und dort ist es genau so. Liegt es vielleicht an der Tatsache, dass ich kein Hauptformular in den Projekteigenschaften angegeben habe ?

Gruß
Stefan

rollstuhlfahrer 4. Jun 2008 14:25

Re: Programm beenden Task im Task Manager weiter vorhanden??
 
Zitat:

Zitat von steewan
Liegt es vielleicht an der Tatsache, dass ich kein Hauptformular in den Projekteigenschaften angegeben habe ?

Daran wirds wohl kaum liegen, wenn du deine Forms über Application.CreateForm aufrufst. Dort wird überprüft, ob es schon eine Main-Form gibt. Falls nicht wird eine gesetzt. Meine Methode zum Beenden (sauberer hoffen ich zumindest mal): PostQuitMessage(0);

Bernhard

steewan 4. Jun 2008 15:12

Re: Programm beenden Task im Task Manager weiter vorhanden??
 
Hallo Bernahrd,

hat leider auch nicht geholfen. Ich weiß auch nicht so genau, was sich nicht beendet. Kann es vielleicht sein, dass noch ein Thread oder so geöffnet ist, welcher nicht beendet wird? Im Debugmodus ist in der Ansicht Threads aber nichts zu sehen.

Leider ist das Projekt zu groß, um es zu posten. Es kann eigentlich nur eine Kleinigkeit sein, da es bis vor kurzem noch funktionierte.

Luckie 4. Jun 2008 15:17

Re: Programm beenden Task im Task Manager weiter vorhanden??
 
Zitat:

Zitat von steewan
Kann es vielleicht sein, dass noch ein Thread oder so geöffnet ist, welcher nicht beendet wird?

Ja, das ist möglich.

Apollonius 4. Jun 2008 15:47

Re: Programm beenden Task im Task Manager weiter vorhanden??
 
Wirklich? Bald nach Application.Terminate sollte Application.Run zurückkehren, danach ist das Hauptprogramm fertig und ruft @Halt0 auf, worin wiederum ExitProcess aufgerufen wird, was sich um verbleibende Threads nicht kümmert.

Luckie 4. Jun 2008 21:05

Re: Programm beenden Task im Task Manager weiter vorhanden??
 
Ja, zu mindest scheint es bei C Programmen so zu sein, jedenfalls hat es der Richter so geschrieben.

Apollonius 4. Jun 2008 21:07

Re: Programm beenden Task im Task Manager weiter vorhanden??
 
Ich habe nicht ganz verstanden, was du mit diesem Beitrag sagen wolltest.

Luckie 4. Jun 2008 21:38

Re: Programm beenden Task im Task Manager weiter vorhanden??
 
Du hast angezweifelt, dass ein Programm nicht eendet wird, wenn noch ein Thread läuft und hast das mit den Funktionsaufrufen bei einem Delphi Programm belegt. Ich habe aber bei Jeffrey Richter "Windows Programmierung für Experten" gelsen gehabt, dass ´wenn noch ein Thread läuft der Prozess nicht beendet wird. Und habe vermutet, dass der Programme, die In C gewschrieben sind, sich da anders verhalten.

Christian Seehase 4. Jun 2008 21:40

Re: Programm beenden Task im Task Manager weiter vorhanden??
 
Moin Stefan,

also ich habe diesen Effekt schon gehabt, wenn ein Programm noch viel aufzuräumen hatte, bevor es sich endgültig beendet hat.

sx2008 5. Jun 2008 06:00

Re: Programm beenden Task im Task Manager weiter vorhanden??
 
Deine selbsterstellten Threads sollten regelmässig überprüfen, ob die Hauptanwendung schon beendet werden soll:
Delphi-Quellcode:
procedure TMyThread.Execute;
begin
   // irgend eine Berechnung / Aufgabe, die der Thread in einer Schleife ausführt
   for i := ...... do
   begin
     .....
     if Application.Terminated then
     begin
       // hier evtl. noch Aufräumarbeiten für den Thread
       ...
       Exit; // und dann so schnell wie möglich raus
     end;
   end;
end;
Das Beenden einer Anwendung wird mit Application.Terminate eingeleitet. (Auch das Schliesen des Hauptform führt intern zum Aufruf von Application.Terminate)
Dies bewirkt, dass das Flag Application.Terminated auf True gesetzt wird.
Und genau dieses Flag müssen die Threads immer mal wieder überprüfen.

Apollonius 5. Jun 2008 15:21

Re: Programm beenden Task im Task Manager weiter vorhanden??
 
@Luckie: Meines Wissens beendet Windows Anwendungen automatisch erst dann, wenn alle Threads beendet sind. Sowohl Delphi- als auch C-RTL rufen aber, nachdem der Haupt-Programmblock (begin-end. bzw. Main) beendet ist, ExitProcess auf.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23: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