![]() |
Programm richtig beenden
Ein Programm startet per PlaySND eine Wave-Datei.
Wenn das Haupfenster geschlossen wird stoppen ich auch die Soundwiedergabe (per Befeht in OnClose). Trotzdem wird im Taskmanager noch ein Task mit dem EXE-Namen angezeigt der kräftig CPU-Resourcen verbraucht. Also wie beende ich auch diesen Task ? |
versuchs einfach mal mit
Delphi-Quellcode:
Application.Terminate;
|
Muß mich korrigieren.
EXE ist nur einmal im Taskmanager. Zur normalen Laufzeit der EXE (Sound spielt) sogut wie keine CPU Auslastung bei EXE. Habe im OnClose-Ereignis der Form1 nun : playsound (nil,0,snd_async); application.terminate; Sobald ich Proggi mit X beende geht CPU-Auslastung auf der EXE gegen 100% und EXE läuft halt irgendwie weiter. |
application.terminate im onClose??!?!?!?!?!?!
gott bewahre!! mach das DA mal weg! |
Zur Info, warum man das NIEMALS machen sollte:
Application.Terminate; terminiert zwar die Anwendung, ruft aber davor noch alle OnClose-Ereignisse des Hauptformulares auf. Somit steckst du in einer Endlosschleife. Genauso gut/schlecht könntest du schreiben (im OnClose-Ereignis):
Delphi-Quellcode:
Chris
// tu irgendwas
Close; |
:( Jeder saacht mach wech.
Aber wohin sollich es denn tun ? :freak: |
Application.Terminate ruft halt nicht die Sachen der onClose Behandlungsroutine auf!!
|
Hallo,
Zitat:
Beendet man das Programm mit Close, so wird auch OnClose aufgerufen, bei App.Terminate ist es aber OnDestroy! Grüsse, Daniel :hi: Nachtrag: Wer es ganz genau wissen will: ![]() |
Eigentlich is doch Application.Terminate nur ein Befehl, der die Anwendung kontrolliert herunterfährt, oder?
|
Hallo,
Zitat:
Wenn Du eine Anwendung mit OnClose schliesst, so ist es beim nächsten Programstart sofort da. Beendest Du aber mit Terminate, so wird auch die Anwendung wieder aus dem Speicher gelöscht und muss beim nächsten Start komplett neu geladen werden. Grüsse, Daniel :hi: |
Also könnte man sagen, dass Terminate die durchaus beste Möglichkeit ist, ein Programm zu beenden, und die einzige, um es vollständig zu beenden.
|
Hallo,
naja, man muss unterscheiden, Programme die man einmal am Tag öffnet, oder einmal in der Woche, kann man durchaus mit Terminate beenden. Aber IE, oder OE oder solche sachen die man ständig immer wieder öffnet, Office-Anwendungen usw., da wäre es ein schmarrn das alles jedes mal neu zu laden. Man bedenke die LAdezeiten. Bei einer Anwendung wo die .exe nicht mehr als 5MB hat, wird das kaum jemandem auffalen, aber so richtig grosse sachen muss man sich überlegen. Grüsse, Daniel :hi: |
Zitat:
|
Wie ich es mir schon gedacht habe. Aus der Hilfe:
Zitat:
Close führt zum Ereignis OnClose der Form in dem zum Schluß das Formular/Fenster geschlossen wird, was auch automatisch dazuführt, das Application.Terminate aufgerufen wird. Ruft man direkt Application.Terminate auf, wird nur das OnClose-Ereignis umgangen. |
:mrgreen: Danke an alle !!
|
Hallo,
dennoch habe ich es nach Sonstiges verschoben, die Sparte Programmieren allgemein ist nur für andere Programmiersprachen da. Grüsse, Daniel :hi: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:18 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