AGB  ·  Datenschutz  ·  Impressum  







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

While Schleife beenden, aber von aussen ?!

Ein Thema von Anthauri · begonnen am 30. Jul 2004 · letzter Beitrag vom 30. Jul 2004
Antwort Antwort
Anthauri

Registriert seit: 1. Feb 2004
61 Beiträge
 
Delphi 6 Personal
 
#1

While Schleife beenden, aber von aussen ?!

  Alt 30. Jul 2004, 15:32
Hallo Leute,
ich habe eine kleine Frage:

Angenommen ich habe eine Schleife in der irgendetwas passiert bis die Bedingung zum Beenden erfüllt ist (z.B. wird ein Zähler durchlaufen).

Wie kann ich das Durchlaufen der Schleife währendessen abbrechen? (allerdings von Außerhalb der Schleife)

Ich habe versucht über einen Schalter (onClick-Ereignis) die Bedingung zu erfüllen (Zähler hoch gesetzt), doch das Anklicken des Schalters wird erst nach der Beendigung der Schleife durchlaufen obwohl der Schalter zuvor angeklickt wurde.

Dann habe ich zum Test einen Timer zusammen mit der Schleife gestartet (Intervall 10), der den Zähler so hoch setzt,dass die Schleife verlassen würde, doch auch der Schritt aus dem Timer wird erst nach dem Ende der Schleife durchlaufen:

Beispiel:

Variablen: i , t :integer;

Programmteil der Schleife

i := 0;
t := 500;
While i < t do
begin;
i := i + 1;
sleep(100);
end;


programmschritt des timers oder des "on click" des Buttons:

i:=t;


Im Praxisfall wählt der Anwender Dateien zum kopieren aus, die in einer Listbox stehen. Diese wird dann durchlaufen (Schleife) bis das Ende der Liste erreicht ist. Ich möchte nun vorsehen, dass der Anwender den Vorgang zwischendurch abbrechen kann.

Nur wie????

Kann die Schleife ggf. so gestartet werden, dass mein Prog währendessen "weiterläuft"?
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#2

Re: While Schleife beenden, aber von aussen ?!

  Alt 30. Jul 2004, 15:36
Hallo,

setz doch mal in deine Schleife de Befehl
application.processmessages ; . Macht den Code zwar langsam, aber sollte klappen. Um die Ausführung bischen zu beschleunigen, kannst du ja zum Beispiel den Befehl nr bei jedem 10. Durchlauf aufrufen.

Gruß,
Tom
  Mit Zitat antworten Zitat
mirko2000

Registriert seit: 9. Nov 2003
69 Beiträge
 
#3

Re: While Schleife beenden, aber von aussen ?!

  Alt 30. Jul 2004, 15:42
Wie wäre es wenn du eine globale Variable vom Typ Boolean deklarierst und der Variable den Wert true zuweist. In der Schleife überprüftst du dann bei jedem Durchlauf ob der Wert der Variable true ist, wenn nicht break ausführen (beendet die Schleife). In der Prozedur der Schaltfläche setzt du dann einfach den Wert der Variable auf false und schon sollte die Schleife beim nächsten Durchlauf abbrechen.
  Mit Zitat antworten Zitat
Filou

Registriert seit: 31. Mai 2004
39 Beiträge
 
Delphi 7 Personal
 
#4

Re: While Schleife beenden, aber von aussen ?!

  Alt 30. Jul 2004, 15:42
Um die Schleife von außen ab zu brechen, brauchst du eine globale Variable:

Delphi-Quellcode:
var
  stop:boolean;
Du Ereignis bei OnClick:
  stop:=true; Nun noch die Schleife:
Delphi-Quellcode:
stop := false;

while (stop=false) AND (i<t)
begin
  Application.ProcessMessages;
  inc(i);
end;
cu
  Mit Zitat antworten Zitat
Benutzerbild von Bowler
Bowler

Registriert seit: 8. Sep 2003
Ort: Bochum
148 Beiträge
 
Delphi XE7 Enterprise
 
#5

Re: While Schleife beenden, aber von aussen ?!

  Alt 30. Jul 2004, 15:45
So sollte es gehen, es ist aber wohl wichtig, dass das ProcessMessages aufgerufen wird, da die Anwendung sonst in der while-Schleife bleibt, und die Message OnClick erst nach der Schleife aufgerufen wird, auch wenn der Button schon längst gedrückt wurde.
Christian Rüsken
  Mit Zitat antworten Zitat
Anthauri

Registriert seit: 1. Feb 2004
61 Beiträge
 
Delphi 6 Personal
 
#6

Re: While Schleife beenden, aber von aussen ?!

  Alt 30. Jul 2004, 15:51
Vielen Dank für die schnellen Antworten.

...processmessages... tut's


...was würde man ohne die Leute hier nur anfangen...
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#7

Re: While Schleife beenden, aber von aussen ?!

  Alt 30. Jul 2004, 15:56
Zitat von Filou:
Um die Schleife von außen ab zu brechen, brauchst du eine globale Variable
Das ist ein Irrglaube der bei vielen Herrscht. Es reicht vollkommen aus wenn diese Variable als Private der Klasse declariert wird wenn die schleife in einer Methode der Klasse ist. Somit ist es dann auch möglich mehrere Instanzen gleichzeitig laufen zu haben welche die Variable als Abbruchbedingung nehmen. Hättest du eine globale Variable würden sich die Instanzen durcheinander bringen weil alle auf die gleiche Variable zugreifen.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Bowler
Bowler

Registriert seit: 8. Sep 2003
Ort: Bochum
148 Beiträge
 
Delphi XE7 Enterprise
 
#8

Re: While Schleife beenden, aber von aussen ?!

  Alt 30. Jul 2004, 15:59
Das stimmt. Ich glaube Filou meinte das so, dass die Variable nicht lokal in der Proc deklariert sein darf, da sie sind im OnClick-Event nicht bekannt ist.
Kurz gesagt: die gleiche Variable muss in beiden Funktionen bekannt sein.
Christian Rüsken
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#9

Re: While Schleife beenden, aber von aussen ?!

  Alt 30. Jul 2004, 16:02
Zitat von Bowler:
Das stimmt. Ich glaube Filou meinte das so, dass die Variable nicht lokal in der Proc deklariert sein darf...
Naja, aber er hat "global" geschrieben und als Beispiel
Delphi-Quellcode:
var
  stop:boolean;
und das sieht eindeutig nach globaler definition aus. Ist ja auch ni böse gemeint, soll eher ein hinnweis für die jenigen sein die denken das man für sowas immer gleich globale variablen definieren muss.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  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 11: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