Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Lösung gesucht für dynamischen Ausstieg aus Prozed. (https://www.delphipraxis.net/72249-loesung-gesucht-fuer-dynamischen-ausstieg-aus-prozed.html)

simlei 27. Jun 2006 17:11


Lösung gesucht für dynamischen Ausstieg aus Prozed.
 
Hallo!
Mein Problem zu der genannten Frage oben ist, dass ich ein Programm habe, welches an vielen Stellen überprüft, ob ein Fehler auftritt. Wenn dies der Fall ist, soll der Programmablauf unterbrochen werden (Timer usw. also periodisch auftauchende und -ablaufende Funktionen ausgenommen, die sind davon nicht betroffen), also so, dass das Programm wieder auf eine Benutzereingabe wartet (zB... "Ein Fehler in ihrem Code wurde gefunden. Bitte korrigieren sie diese und rufen sie dann erneut auf" - in der Art).

Das Problem ist eben nur, dass ich dann eine bool-Variable habe, und wenn die auf "true" geschaltet wird (von einer Prüfprozedur), so soll dieser "Stoppeffekt" eintreten... da diese Prüfprozeduren aber mittendrin und häufig stehen, müsste ich dann jede/n einzelne/einzelnen Anweisung/Anweisungsblock mit einer Abfrage der bool-Variablen koppeln... und das ist zu schreibaufwändig, wie ich finde, es sollte ja eine Möglichkeit geben, dies zu umgehen...
Gibt es also so etwas wie ein "Gloabl-Break" (wie für Schleifen), dass alle Prozeduren, die gerade laufen (also auch die Prozedur, die die Prozedur aufgerufen hat, in der sich die Prüfprozedur befindet, die rumgemeckert hat usw...), beendet werden?

Massenhaft Ruhm und Ehre winken dem schnellen Antwortenden xD
(Also danke schonmal)

mkinzler 27. Jun 2006 17:14

Re: Lösung gesucht für dynamischen Ausstieg aus Prozed.
 
Du könntest die eine benutzerdefinierte Exception generieren.

stz 27. Jun 2006 17:24

Re: Lösung gesucht für dynamischen Ausstieg aus Prozed.
 
Zitat:

Zitat von mkinzler
Du könntest die eine benutzerdefinierte Exception generieren.

Das wäre auch mein Vorschlag gewesen:
Delphi-Quellcode:
raise Exception.Create('Es trat ein Fehler auf.');
Hier steht noch ein wenig mehr darüber...

simlei 27. Jun 2006 18:20

Re: Lösung gesucht für dynamischen Ausstieg aus Prozed.
 
hmmm. Und die Exception bricht dann alle laufenden Prozesse wie ich geschildert habe ab?

Edit...
Scheint der Fall zu sein (habs ne weile getestet.
In einer Try..Except-Umgebung löst es aber den Except-Teil aus. Gibt es eine Möglichkeit, dass der Except-Teil da nicht ausgelöst wird?

stz 27. Jun 2006 18:28

Re: Lösung gesucht für dynamischen Ausstieg aus Prozed.
 
Zitat:

Zitat von simlei
hmmm. Und die Exception bricht dann alle laufenden Prozesse wie ich geschildert habe ab?

nicht direkt. Bildlich gesprochen geht es immer weiter nach oben, bis ein Konstrukt mit "try except end" oder "try finally end" kommt. Kommt keins, wird Application.OnExcept ausgelöst bzw. standardmäßig eine Fehlermeldung angezeigt wenn dort nichts zugeordnet ist. "Nach oben" soll heißen Schritt für Schritt in die Funktion/Prozedur die die aktuelle aufgerufen hat.

Laufen noch Prozesse in anderen Threads werden diese natürlich nicht abgebrochen, da sie in der "Treppe nach oben" nicht vorkommen.

markusj 27. Jun 2006 18:30

Re: Lösung gesucht für dynamischen Ausstieg aus Prozed.
 
Zitat:

Zitat von simlei
hmmm. Und die Exception bricht dann alle laufenden Prozesse wie ich geschildert habe ab?

Edit...
Scheint der Fall zu sein (habs ne weile getestet.
In einer Try..Except-Umgebung löst es aber den Except-Teil aus. Gibt es eine Möglichkeit, dass der Except-Teil da nicht ausgelöst wird?

Ja, indem du zusätzlich eine Variable setzt, die du in allen Except-Teilen überprüfst.

mfG

Markus

stz 27. Jun 2006 18:42

Re: Lösung gesucht für dynamischen Ausstieg aus Prozed.
 
Zitat:

Zitat von simlei
In einer Try..Except-Umgebung löst es aber den Except-Teil aus. Gibt es eine Möglichkeit, dass der Except-Teil da nicht ausgelöst wird?

z. B.:
Delphi-Quellcode:
try

 ...
except
  on EZeroDivide do HandleZeroDivide;
  on EOverflow do HandleOverflow;
  on EMathError do HandleMathError;
end;
Behandelt alle angebenen Exception und alle anderen gehen in meiner "Treppe" eine Stufe hoch...

simlei 27. Jun 2006 20:14

Re: Lösung gesucht für dynamischen Ausstieg aus Prozed.
 
Hm nun gut ... insgesamt hat das jetzt funktioniert (mit noch n paar tricks)
Aber da tritt jetzt so ein unbeschreiblicher Fehler auf...
über ein bisher funktionierenden (großen) code "Stülpte" ich einfach eine try..except-umgebung,
etwa so...

try
//code
...
except
cannotproceed := true;
end;

Eine Accessviolation erscheint. Wieso?


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:21 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz