![]() |
Application beenden, wärend Procedure
Hi,
wie beende ich meine Application, wärend eine Procedure ausgeführt wird? mein bisherigen versuche:
Delphi-Quellcode:
hab alle mal durchprobiert auch in Verbindung miteinander.
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin application.Terminate; application.Destroy; close; end; mfg gandime |
Re: Application beenden, wärend Procedure
Delphi-Quellcode:
Das darf natürlich nicht in CloseQuery drin stehen; dort solltest du wirklich nur prüfen, ob du CanClose auf true oder false setzen willst.
procedure Finity;
begin while true do begin Foo(); if ZeitZumSterben then begin Application.Terminate; //Beendet das Programm sobald möglich. Exit; //Verlässt die Prozedur und das Programm wird beendet. end; end; end; |
Re: Application beenden, wärend Procedure
Das hilft/funktioniert nicht, da das Prog in einer repeat-Schleife steckt wo es nicht raus kommt:
Delphi-Quellcode:
ich könnte natürlich überall folgendes hinzufügen:
repeat
bt_weiter.Enabled:=true; repeat application.ProcessMessages; sleep(10); until b_fertig=true; b_fertig:=false; until set_pop3=true;
Delphi-Quellcode:
Aber da habe ich Angst das etwas am pop3 ausgelöst wird was noch nicht gemacht werden soll wie z.B. eMail löschen oder sowas.
until (set_pop3=true) or (application.Terminated);
Das könnte man natürlich auch umgehen :-D
Delphi-Quellcode:
aber bei fast 10000 Zeilen Code habe ich nicht recht viel lust das alles nachzugucken und einzufügen ;-)
if application.terminated then
begin exit; end; |
Re: Application beenden, wärend Procedure
Auf was wartest du denn in dieser Schleife? b_fertig wird dort ja niemals true, das sieht aus wie eine Endlosschleife...
|
Re: Application beenden, wärend Procedure
Es wird normalerweise durch einen Buttonklick erfüllt.
Aber ich frage danach ob es möglich ist ohne das es in der Schleife eingetragen ist das Prog sofort zu schließen |
Re: Application beenden, wärend Procedure
Delphi-Quellcode:
:lol:
halt;
|
Re: Application beenden, wärend Procedure
genau das habe ich gesucht :-)
thx edit: gibt es auch eine Procedure um nur alle Schleifen abzubrechen und nicht das Prog auszuschalten? |
Re: Application beenden, wärend Procedure
Du kannst eine Exception erzeugen und diese bis zur WndProc durchreichen. (Wäre auch angebrachter anstatt "halt" zu verwenden)
|
Re: Application beenden, wärend Procedure
Zitat:
break: bricht eine Schliefe ab continue: macht mit dem nächsten Schleifendurchlauf weiter exit: verlässt die aktuelle Prozedur / Funktion usw. Noch was: Wenn Du nicht mit Threads arbeitest, kann sich das Programm nur jeweils in einer Schleife befinden. |
Re: Application beenden, wärend Procedure
ich habe aber zwei verschiedene schleifen:
Delphi-Quellcode:
repeat
bt_weiter.Enabled:=true; repeat application.ProcessMessages; sleep(10); until b_fertig=true; b_fertig:=false; until set_pop3=true;
Delphi-Quellcode:
das geht ja mit beak exit usw. nicht
procedure TForm1.bt_stopClick(Sender: TObject);
begin //hiermit will ich alle anderen Schleifen beenden end; |
Re: Application beenden, wärend Procedure
Vielleicht so in der Art:
Delphi-Quellcode:
abgebrochen := false;
repeat bt_weiter.Enabled:=true; repeat application.ProcessMessages; if abgebrochen then break; //verlässt die innere Schleife sleep(10); until b_fertig; b_fertig:=false; until set_pop3 or abgebrochen; //verlässt ggf. die äußere Schleife |
Re: Application beenden, wärend Procedure
Zitat:
|
Re: Application beenden, wärend Procedure
Zitat:
Der obige Code muss an strategisch richtigen Stellen in deinem Programm eingebaut werden. Dabei helfen folgende Überlegungen: Dein Programm sollte spätestens nach 1,5 Sekunden reagieren, nach dem der Benutzer es beendet hat. Wenn es also 2 oder mehr verschachtelte Schleifen gibt, dann reicht es meistens aus, obigen Code in die äussere Schleife zu packen. Die Variable Application.Terminated kann sich nur ändern, wenn zuvor Application.ProcessMessages aufgerufen wurde ! Also ergibt sich logisch folgende Konstruktion:
Delphi-Quellcode:
application.ProcessMessages;
if application.Terminated then exit; |
Re: Application beenden, wärend Procedure
Ok dann muss ich mich damit abfinden das ich an allen Endlosschleifen application.terminated hinzufügen muss...
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:12 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