AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Verschachtelte Schleifen unterbrechen

Ein Thema von Delphi-Narr · begonnen am 16. Feb 2010 · letzter Beitrag vom 16. Feb 2010
Antwort Antwort
Benutzerbild von Delphi-Narr
Delphi-Narr

Registriert seit: 29. Aug 2009
Ort: Duisburg
437 Beiträge
 
Delphi 2007 Professional
 
#1

Verschachtelte Schleifen unterbrechen

  Alt 16. Feb 2010, 13:35
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!
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Verschachtelte Schleifen unterbrechen

  Alt 16. Feb 2010, 13:46
Versuch es mal mit Delphi-Referenz durchsuchenExit.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
blauweiss

Registriert seit: 19. Jun 2007
142 Beiträge
 
#3

Re: Verschachtelte Schleifen unterbrechen

  Alt 16. Feb 2010, 13:46
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
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Verschachtelte Schleifen unterbrechen

  Alt 16. Feb 2010, 14:03
Zitat von DeddyH:
Versuch es mal mit Delphi-Referenz durchsuchenExit.


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.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Verschachtelte Schleifen unterbrechen

  Alt 16. Feb 2010, 14:04
Bitte nicht schon wieder eine Grundsatzdiskussion, davon hatten wir hier schon genug.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Delphi-Narr
Delphi-Narr

Registriert seit: 29. Aug 2009
Ort: Duisburg
437 Beiträge
 
Delphi 2007 Professional
 
#6

Re: Verschachtelte Schleifen unterbrechen

  Alt 16. Feb 2010, 14:09
Ich hatte es bisher mit Break versucht, deshalb wurde immer nur eine Schleife abgebrochen.
Danke
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#7

Re: Verschachtelte Schleifen unterbrechen

  Alt 16. Feb 2010, 15:44
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';
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.116 Beiträge
 
Delphi 12 Athens
 
#8

Re: Verschachtelte Schleifen unterbrechen

  Alt 16. Feb 2010, 16:21
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Delphi-Narr
Delphi-Narr

Registriert seit: 29. Aug 2009
Ort: Duisburg
437 Beiträge
 
Delphi 2007 Professional
 
#9

Re: Verschachtelte Schleifen unterbrechen

  Alt 16. Feb 2010, 17:06
Tja, wäre schon schön. Aber mit Exit klappt es auch, da die gesamte Prozedur nur aus einer Endlosschleife besteht.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04: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