![]() |
Application.Terminate wird einfach ignoriert !! ???
Hallo Zusammen,
Application.Terminate heisst doch eigentlich, dass die Applikation beendet wird. Bei mir nicht :wall: Nach Application.Terminate hagelt es bei mir Schutzverletzungen :gruebel: Ich habe es erst beim Debuggen gefunden: D7 Enterprise geht einfach über Application.Terminate hinweg ... ![]() Hat da einer eine Idee? Beste Grüße, Uwe F |
Re: Application.Terminate wird einfach ignoriert !! ???
Application.Terminate ruft nur PostQuitMessage() auf, d.h. es erfolgt keine sofortige Beendigung des Programms, sondern es wird nur ein WM_QUIT in die MessageQueue gelegt.
|
Re: Application.Terminate wird einfach ignoriert !! ???
Hi,
zwar frage ich mich wieso du nach deinem application.terminate noch Code ausführen möchtest... aber das sei jetzt erstmal dahin gestellt. Würde es etwas bringen, wenn du nach Terminate noch ProcessMessages aufrufst??
Delphi-Quellcode:
Leider bin ich mich nicht sicher
Application.Terminate; //App beenden
Application.ProcessMessages; //um das Quit-Signal zuverarbeiten MfG Dave |
Re: Application.Terminate wird einfach ignoriert !! ???
Ja, in gewissen Fehlerfällen will ich vorzeitig das Programm beenden.
Der dargestellte "Schnipsel" war nur ein Beispiel zur Demonstration. Das mit dem Processmessages werde ich mal testen. Beste Grüße, Uwe |
Re: Application.Terminate wird einfach ignoriert !! ???
Hi,
Sämtlicher Code nach Apoplicaton.Terminate wird augfgerufen, bis das Programm im Leerlauf ist... Wenn du also eventuell noch irgendwo eine Schleife abarbeitest, musst du das z. B. so machen:
Delphi-Quellcode:
Ansonsten mache ich es immer so:
repeat
... until (a < b) or Application.Terminated;
Delphi-Quellcode:
Damit auch die aktuelle procedure (oder function) verlassen wird.
if c < 0 then
begin ... Application.Terminate; exit; end; Mfg FAlter |
Re: Application.Terminate wird einfach ignoriert !! ???
Moin Uwe,
Du solltest übrigens, ggf., auch daran denken, dass bei Application.Terminate die OnCloseQuery- und OnClose-Ereignisse nicht ausgeführt werden. |
Re: Application.Terminate wird einfach ignoriert !! ???
Zitat:
Ein Beispiel ist die Einbindung von ADO. Nach Terminate kommem jede Menge Schutzverletzungen (obwohl ADO nur eingebunden ist und nicht benutzt wurde). Kommentiere ich alle ADO-Zugriffe nebst Einbindung in USES aus, geht alles. Gibt's denn so etwas wie einen kontrollierten Ausstieg mit allen OnCloseQuery- und OnClose-Ereignisse? Bisher sah ich Terminate als solchen an ... Beste Grüße, Uwe |
Re: Application.Terminate wird einfach ignoriert !! ???
Moin Uwe,
Close im Hauptformular schliesst die Anwendung. Zu Schutzverletzungen dürfte es aber auch bei Application.Terminate nicht kommen, denn OnDestroy wird aufgerufen. Das Hauptproblem dürfte, wie schon mehrfach gesagt, einfach sein, dass nach dem Terminate noch Code ausgeführt wird, was Du durch eine andere Strukturierung vermeiden könntest. |
Re: Application.Terminate wird einfach ignoriert !! ???
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Kollegen,
es muss wohl an ADO liegen; folgende minimalistische Konstruktion erzeugt den erwähnten Fehler:
Code:
program Project1;
uses Forms, Unit1 in 'Unit1.pas'; begin Application.Initialize; Application.CreateForm(TForm1, Form1); If not True then Application.Run; end.
Code:
Fehlermeldung: sieh Anhang.
unit Unit1;
interface uses Windows, Forms, DB, ADODB, Classes; type TForm1 = class(TForm) ADOConnection1: TADOConnection; ADOTable1: TADOTable; private public end; var Form1: TForm1; implementation end. Vermutlich muss ich die ADO "irgendwie" stoppen ... hat jemand eine Idee, wie :gruebel: Gruss, Uwe |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:52 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 by Thomas Breitkreuz