Process beendet sich nicht
- juelin
- Beiträge: 260
- Registriert: Sa 24. Jul 2021, 18:03
- OS, Lazarus, FPC: Linux Ubuntu 22. Windows 10 Delphi 11.3 (L 0.9.xy FPC 2.2.z)
- CPU-Target: 64Bit
- Wohnort: Mannheim
Process beendet sich nicht
Hallo,
habe ein Lazarusprogramm.
Beim Beenden des Programms setzte ich im Event OnFormClose den Befehl CloseAction:=caFree; ab.
Der Event FormDestroy wird auch ausgeführt.
Aber der Prozess beendet sich nicht.
Im Taskmanager ist der Prozess noch drin.
Kann mir da jemand helfen?
Danke und Gruß
Jürgen
habe ein Lazarusprogramm.
Beim Beenden des Programms setzte ich im Event OnFormClose den Befehl CloseAction:=caFree; ab.
Der Event FormDestroy wird auch ausgeführt.
Aber der Prozess beendet sich nicht.
Im Taskmanager ist der Prozess noch drin.
Kann mir da jemand helfen?
Danke und Gruß
Jürgen
-
- Beiträge: 732
- Registriert: Do 27. Sep 2012, 00:07
- OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
- CPU-Target: x86_64-win64
- Wohnort: Hamburg
Re: Process beendet sich nicht
Dein Fehler sieht aus, als ob du noch ein Thread laufen hast, oder eine Schleife mit "Application.ProcessMessages" laufen hast, kontrolliere danach.
- Zvoni
- Beiträge: 378
- Registriert: Fr 5. Jul 2024, 08:26
- OS, Lazarus, FPC: Windoof 10 Pro (Laz 2.2.2 FPC 3.2.2)
- CPU-Target: 32Bit
- Wohnort: BW
Re: Process beendet sich nicht
Application.Terminate?
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
- juelin
- Beiträge: 260
- Registriert: Sa 24. Jul 2021, 18:03
- OS, Lazarus, FPC: Linux Ubuntu 22. Windows 10 Delphi 11.3 (L 0.9.xy FPC 2.2.z)
- CPU-Target: 64Bit
- Wohnort: Mannheim
Re: Process beendet sich nicht
Danke für Eure Ideen.
Muss wohl mit dem Application.ProcessMessages zusammen hängen.
Ich habe im Programm 2 Timer,
Der 1. Timer läuft mit 500 ms.
Der 2. Timmer lauft mit 2000 ms.
Wenn ich aber im 1. Timer den Befehl Application.ProcessMessages raus nehme,
so bleibt das Programm stehen (der 2. Timer bekommt keine Rechenzeit mehr).
der Befehl Application.Terminate bringt gar nichts.
Habt Ihr noch Ideen?
Danke und Gruß
Jürgen
Muss wohl mit dem Application.ProcessMessages zusammen hängen.
Ich habe im Programm 2 Timer,
Der 1. Timer läuft mit 500 ms.
Der 2. Timmer lauft mit 2000 ms.
Wenn ich aber im 1. Timer den Befehl Application.ProcessMessages raus nehme,
so bleibt das Programm stehen (der 2. Timer bekommt keine Rechenzeit mehr).
der Befehl Application.Terminate bringt gar nichts.
Habt Ihr noch Ideen?
Danke und Gruß
Jürgen
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1648
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: Process beendet sich nicht
Timerbehandlungsroutinen sollten immer nur kurz laufen und dann gleich wieder verlassen werden.
Da ist am Design der Anwendung etwas verkehrt.
Da ist am Design der Anwendung etwas verkehrt.
- Zvoni
- Beiträge: 378
- Registriert: Fr 5. Jul 2024, 08:26
- OS, Lazarus, FPC: Windoof 10 Pro (Laz 2.2.2 FPC 3.2.2)
- CPU-Target: 32Bit
- Wohnort: BW
Re: Process beendet sich nicht
Unabhängig vom Thema: Wieso überhaupt 2 Timer?
Timer1-Intervall=500 ms
Timer2-Intervall=2000 ms
Wäre jetzt erstmal auf einen Timer gegangen mit ner case Of/If Then Klausel.
Der Code für Timer2 wird immer nur dann ZUSÄTZLICH ausgeführt, wenn Timer1 das VIERTE mal aufgerufen wird.
Vielleicht ensteht durch die zwei Timer ein Deadlock, und man könnte es damit vielleicht umgehen.
Zum Beenden des Programms im FormClose dann einfach den Timer deaktiveren bevor beendet wird
EDIT
Ich tippe mal darauf, dass (zumindest einer davon) die Timer eine Aktualisierung seiner Oberfläche durchführen, damit man sehen kann, wie die Flugzeuge sich bewegen
Timer1-Intervall=500 ms
Timer2-Intervall=2000 ms
Wäre jetzt erstmal auf einen Timer gegangen mit ner case Of/If Then Klausel.
Der Code für Timer2 wird immer nur dann ZUSÄTZLICH ausgeführt, wenn Timer1 das VIERTE mal aufgerufen wird.
Vielleicht ensteht durch die zwei Timer ein Deadlock, und man könnte es damit vielleicht umgehen.
Zum Beenden des Programms im FormClose dann einfach den Timer deaktiveren bevor beendet wird
EDIT
Sein Programm heisst "Flight Radar", und ich kenne das "offizielle" Programm gleichen Namens.fliegermichl hat geschrieben: Di 1. Okt 2024, 09:49 Timerbehandlungsroutinen sollten immer nur kurz laufen und dann gleich wieder verlassen werden.
Da ist am Design der Anwendung etwas verkehrt.
Ich tippe mal darauf, dass (zumindest einer davon) die Timer eine Aktualisierung seiner Oberfläche durchführen, damit man sehen kann, wie die Flugzeuge sich bewegen
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
- juelin
- Beiträge: 260
- Registriert: Sa 24. Jul 2021, 18:03
- OS, Lazarus, FPC: Linux Ubuntu 22. Windows 10 Delphi 11.3 (L 0.9.xy FPC 2.2.z)
- CPU-Target: 64Bit
- Wohnort: Mannheim
Re: Process beendet sich nicht
Also die Timer werden bei FormOnCloseQuery deaktiviert.
Re: Process beendet sich nicht
Passiert das nur in der IDE (besser gesagt unter dem Debugger), oder auch wenn es frei läuft?
Hast du schon mal mit dem Debugger geschaut, wo es hängen könnte?
Hast du schon mal mit dem Debugger geschaut, wo es hängen könnte?
-
- Beiträge: 6
- Registriert: Di 1. Okt 2024, 13:05
Re: Process beendet sich nicht
Hallo juelin, du sollte immer gewährleisten, dass die Routine im TimerEvent gerade nicht läuft, wenn die Applikation geschlossen wird. Im schlimmsten Fall greift die Routine auf Objekte zu die im CloseEvent freigegeben werden. Das kann zu diese Effekte komme.
- juelin
- Beiträge: 260
- Registriert: Sa 24. Jul 2021, 18:03
- OS, Lazarus, FPC: Linux Ubuntu 22. Windows 10 Delphi 11.3 (L 0.9.xy FPC 2.2.z)
- CPU-Target: 64Bit
- Wohnort: Mannheim
Re: Process beendet sich nicht
ok, Danke für die vielen Infos.
Es war der Application.ProcessMessage.
Man kan den Timer schliesen, aber der Application.ProcessMessage macht extra Prozesse.
Und die müssen auch erst geschlossen bzw. abgebrochen werden.
Alles Gute
Jürgen
Es war der Application.ProcessMessage.
Man kan den Timer schliesen, aber der Application.ProcessMessage macht extra Prozesse.
Und die müssen auch erst geschlossen bzw. abgebrochen werden.
Alles Gute
Jürgen