![]() |
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 |
Re: Programm beenden Task im Task Manager weiter vorhanden??
Zitat:
der Hauptgrund dürfte wohl der sein das man sein Programm mit ![]() |
Re: Programm beenden Task im Task Manager weiter vorhanden??
probiers mal einfach mit close();
MFG Steffen |
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 |
Re: Programm beenden Task im Task Manager weiter vorhanden??
Zitat:
Bernhard |
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. |
Re: Programm beenden Task im Task Manager weiter vorhanden??
Zitat:
|
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.
|
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.
|
Re: Programm beenden Task im Task Manager weiter vorhanden??
Ich habe nicht ganz verstanden, was du mit diesem Beitrag sagen wolltest.
|
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.
|
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. |
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:
Das Beenden einer Anwendung wird mit Application.Terminate eingeleitet. (Auch das Schliesen des Hauptform führt intern zum Aufruf von Application.Terminate)
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; Dies bewirkt, dass das Flag Application.Terminated auf True gesetzt wird. Und genau dieses Flag müssen die Threads immer mal wieder überprüfen. |
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