![]() |
Verschachtelte Schleifen unterbrechen
Hallo,
ich habe ein Programm, in dem eine Endlosschleife laufen soll. Dazu verwende ich eine While-SChleife, bei der die Abbruchbedingung niemals zutreffen kann. In dieser Schleife befinden sich weitere Schleifen, diese haben Abbruchbedingungen, die erfüllt werden. Jetzt möchte ich, wenn man auf das Formular klickt, dass ALLE diese Schleifen unterbrichen werden und das Programm geschlossen wird. Wie kann ich das machen, ohne dass ich warten muss, bis eine der Unterschleifen beendet ist? Liebe Grüße! |
Re: Verschachtelte Schleifen unterbrechen
Versuch es mal mit
![]() |
Re: Verschachtelte Schleifen unterbrechen
Du kannst eine Methode mit exit verlassen. Oder Du deklarierst eine Abbruchbedingung (boolean), auf die auch in allen (Unter)schleifen zusätzlich geprüft wird.
Grüße, blauweiss |
Re: Verschachtelte Schleifen unterbrechen
Zitat:
Zitat:
|
Re: Verschachtelte Schleifen unterbrechen
Bitte nicht schon wieder eine Grundsatzdiskussion, davon hatten wir hier schon genug.
|
Re: Verschachtelte Schleifen unterbrechen
Ich hatte es bisher mit Break versucht, deshalb wurde immer nur eine Schleife abgebrochen.
Danke |
Re: Verschachtelte Schleifen unterbrechen
Hier kommt ein kleines Beispiel.
In den Tiefen der Schleifen wird auf zwei Abbruchbedingungen reagiert: * Boolean-Flag FRunning. Diese Flag kannst du per Klick auf einen Button auf False setzen * Application.Terminated sollte man immer auch abfragen. Niemand mag Programme, die sich nicht per Klick auf das Schliesen-Icon sofort beenden lassen
Delphi-Quellcode:
FRunning := True;
for y := 0 to 1023 do for x := 0 to 1279 do begin Canvas.Pixels[x,y] := CalculateMandelbrotColor(x,y); if (not FRunning) or (Application.Teminated) then begin // optional hier noch etwas aufräumen oder mitteilen StatusBar1.SimpleText := 'Berechnung abgebrochen'; Exit; // und raus hier end; end; Statusbar.SimpleText := 'fertig'; |
Re: Verschachtelte Schleifen unterbrechen
Delphi-Quellcode:
Und schon kommt man auch mit einem BREAK da raus.
for i := 0 to 1310719 do
begin x := i div 1024; y := i mod 1024; ... end; PS: Man kann sich oftmals auch noch mit dem guten alten, aber irgendwie dennoch ständig verdamten, GOTO behelfen. oder eben so
Delphi-Quellcode:
for y := 0 to 1023 do
begin for x := 0 to 1279 do begin Canvas.Pixels[x,y] := CalculateMandelbrotColor(x,y); if (not FRunning) or Application.Teminated then break; end; if (not FRunning) or Application.Teminated then begin ... break; end; end; Aber ganz im Ernst, sowas wie Break(2); , um 2 Schleifen abzubrechen hab ich mir schon öfters gewünscht. |
Re: Verschachtelte Schleifen unterbrechen
Tja, wäre schon schön. Aber mit Exit klappt es auch, da die gesamte Prozedur nur aus einer Endlosschleife besteht.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09: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-2025 by Thomas Breitkreuz