AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Schleife duch Button anhalten und stoppen
Thema durchsuchen
Ansicht
Themen-Optionen

Schleife duch Button anhalten und stoppen

Ein Thema von Axxus · begonnen am 13. Nov 2006 · letzter Beitrag vom 13. Nov 2006
Antwort Antwort
Axxus

Registriert seit: 3. Okt 2006
212 Beiträge
 
Turbo Delphi für Win32
 
#1

Schleife duch Button anhalten und stoppen

  Alt 13. Nov 2006, 15:49
Also folgendes Problem ich hab 2 For do schleifen ineinander
Delphi-Quellcode:
If Fehler <> true Then
  begin
    For x := min_x to max_x do
    begin
      For y := min_y to max_y do
      begin
        If x < y Then
        begin
          z1 := x*x + y*y;
          z := sqrt (z1);
          if round(z)=z then
          begin
            Ausgabe := ( inttostr (x) + '; ' +inttostr (y) + '; ' + FloattoStr (z));
            Memo.Lines.Add (Ausgabe);
            Liste.Add(Ausgabe);
            Counter := Counter + 1;

          end;
        end;
      end;
    end;
    Memo.Lines.Add(inttostr (counter) + ' Zahlentrippel');
    counter := 0;
   
  end;
So sieht der Quelltext aus

x und y können in dem prog schon mal 1.000.000 werden (wie es der benutzer halt will)
solange das Programm die schleife berechnet kann ich nix anderes mit dem Programm machen
deswegen meine Frage

Wie kann ich während die Schleife läuft in dem Programm auf nen button drücken und wie kann der die Schleife anhalten und stoppen

Ich hoffe es ist klar was ich meine

wenn nicht posten und ich erklärs

Axxus
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Schleife duch Button anhalten und stoppen

  Alt 13. Nov 2006, 15:56
Hallo,

damit dein Programm das Ereignis OnClick() des Stop-Buttons verarbeiten kann, musst du aus deinen verschachtelten Schleifen heraus gelegentlich Application.ProcessMessages aufrufen. Du kannst dann in deinem OnClick-Handler eine globale Variable CanceledByUser auf True setzen und diese Variable innerhalb deiner Schleife abfragen um ein Exit bzw. Break auszuführen. Oder du arbeitest gleich mit einem eigenen thread für die Berechnung.

Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von cruiser
cruiser

Registriert seit: 23. Dez 2003
Ort: Königsbrück/Sachsen
455 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Schleife duch Button anhalten und stoppen

  Alt 13. Nov 2006, 16:02
Damit die Anwendung weiter reagiert gibt es zwei verschiedene Möglichkeiten:

1.) Du lagerst alles in einen Thread aus oder

2.) Du gibst der Anwendung Zeit auf Ereignisse zu reagieren. In der Codebibliothek findet sich da 100%ig etwas.

Das mit dem Stoppen/pausieren:

1.) Stoppe/Starte den Thread oder

2.) Bau auf while..do oder repeat..until Schleifen um und prüf mit einer globalen Variable ob die Schleife durchlaufen werden soll oder nicht.

Threads machen zwar auf den ersten Blick mehr Arbeit, aber es könnt sich lohnen, das mal anzusehn

EDIT: Roter Kasten... marabu war schneller
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Schleife duch Button anhalten und stoppen

  Alt 13. Nov 2006, 16:20
Marbu's Variante benutze ich auch immer und sie reicht vollkommen. Einen Thread für den Vorgang zu proggen sollte nicht daran entschieden werden ob die Bearbeitung zwischendurch abgebrochen wird. Für einen eigenen Thread entscheidet man sich aus anderen Gründen. Das ist so bei dir sicher nicht nötig.

Das Exit würde ich hier einfügen:
Delphi-Quellcode:
If Fehler <> true Then
  begin
    For x := min_x to max_x do
    begin
      For y := min_y to max_y do
      begin
        Application.ProcessMessages;
        IF FUserBreak then Exit;
....
Die Variable FUserBreak wird wie Marabu beschrieben hat im ButtonClick-Ereignis gesetzt auf welches die Anwendung nach Application.ProcessMessages hinreichend reagieren kann.

Gruß oki
  Mit Zitat antworten Zitat
Sidorion

Registriert seit: 23. Jun 2005
403 Beiträge
 
#5

Re: Schleife duch Button anhalten und stoppen

  Alt 13. Nov 2006, 16:52
...wobei man sich evtl noch einen Zähler hernimmt und nur alle z.b.: 1000 (innere) Schleifendurchgänge das ProcessMessages ruft, da dieses doch arg an der Performance nagt.
Manchmal sehen Dinge, die wie Dinge aussehen wollen mehr wie Dinge aus, als Dinge
<Esmerelda Wetterwachs>
  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 23:37 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