Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Verschachtelte Schleifen unterbrechen (https://www.delphipraxis.net/147790-verschachtelte-schleifen-unterbrechen.html)

Delphi-Narr 16. Feb 2010 13:35


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!

DeddyH 16. Feb 2010 13:46

Re: Verschachtelte Schleifen unterbrechen
 
Versuch es mal mit Delphi-Referenz durchsuchenExit.

blauweiss 16. Feb 2010 13:46

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

omata 16. Feb 2010 14:03

Re: Verschachtelte Schleifen unterbrechen
 
Zitat:

Zitat von DeddyH
Versuch es mal mit Delphi-Referenz durchsuchenExit.

:wall:

Zitat:

Zitat von blauweiss
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.

:thumb:

DeddyH 16. Feb 2010 14:04

Re: Verschachtelte Schleifen unterbrechen
 
Bitte nicht schon wieder eine Grundsatzdiskussion, davon hatten wir hier schon genug.

Delphi-Narr 16. Feb 2010 14:09

Re: Verschachtelte Schleifen unterbrechen
 
Ich hatte es bisher mit Break versucht, deshalb wurde immer nur eine Schleife abgebrochen.
Danke

shmia 16. Feb 2010 15:44

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';

himitsu 16. Feb 2010 16:21

Re: Verschachtelte Schleifen unterbrechen
 
Delphi-Quellcode:
for i := 0 to 1310719 do
begin
  x := i div 1024;
  y := i mod 1024;
  ...
end;
Und schon kommt man auch mit einem BREAK da raus.


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.

Delphi-Narr 16. Feb 2010 17:06

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 12:26 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