Jak sPAUZOWAĆ pętle repeat

0

Witam mam taki myślę banalny problem ale nie moge sobie z nim poradzić czy ktoś wie jak spauzować pętle Repeat a np po jakimś czsie znów ją uruchomić.

Mam takie coś:

Repeat

Application.ProcessMessages;
n:=n+1;

Until n=50000;

Czy da sie w pewnym momencie to zatrzymać np jak zmienna n jest równa 10000 i póżniej znów włączyć ta pętlę od momentu zatrzymania.

Można to zatrzymać dając w jakimś buttonie polecenie n:=50000 ale wtedy pętla sie nie uruchomi.

Z góry dzięki za pomoc !!!

0

Możesz zrobić dwie pętle, wsadzając między nie to, co ma sięwykonywać w przerwie :-P

0

Globalne n i po klopocie, jak chcesz zatrzymac robisz normalnie Break, a jak chcesz wznowic to wywolujesz procedurke zawierajaca ta petle.

0

Możesz też użyć procedury DELAY(czas w milisekundach)

Np.
[code]
repeat
n:=n+1;
if n=1000 then delay(1000);
until n=5000;
[/code]
i wtedy przy n=1000 pętla zatrzyma się na 1 sekunde (1000 milisekund)

0

zmiena "n" jest globalna a funkcja Break musi być zawarta w pętli a mnie chodszi o to żeby np użytkownik programu mógł w dowolnym czasie zatrzymać pętle i np zapisać sobie rezultat tej pętli i potem włączyć ją znowu żeby kontynłować.

w zmiennej "n" mam kilku milionowe liczby i wykonywanie pętli niekiedy trwa kilka godzin. A kiedy pętla jest w ruchu to nie można zamknąć programu.

0

a mnie chodszi o to żeby np użytkownik programu mógł w dowolnym czasie zatrzymać pętle i np zapisać sobie rezultat tej pętli i potem włączyć ją znowu żeby kontynłować.

oto chodzi? :
[code]
repeat
n:=n+1;
if n=10000 then writeln(n); {czy też inny "rezultat" pętli}
until n=50000;[/code]

a jeżeli chodzi Ci o wyjście z pętli i potem znowu powrócenie do niej to może coś takiego:

[code]
var n:integer;

begin
while true do {lub inny warunek}
begin
repeat
n:=n+1;
if n=10000 then break;
until n=50000;
if n=10000 then writeln(n); {lub inny rezultat}
end;
end.
[/code]
czy oto chodziło? [???]

0

Ja tez nie kumam o co Ci chodzi ale moze o cos takiego:

var
  Stop: Boolean;{Jesli false to petelka dziala}

procedure TForm1.Button1Click(Sender: TObject);{Tu startuje petelka}
var
  n: Word;
begin
  Button1.Enabled:=False;
  n := 0;
  repeat
    Application.ProcessMessages;
    if not Stop then
    begin
      n := n + 1;
      ListBox1.Items.Add(IntToStr(n));
    end;
  until n=50000;
  Button1.Enabled:=True;
end;

procedure TForm1.Button2Click(Sender: TObject);{A tu sobie zatrzymujesz i wznawiasz}
begin
  Stop := not Stop;
end;

0

Wielkie dzieki wszystkim za pomoc zebrałem wszystko w jedno i wyszło mniej więcej tak:

var
Stop: Boolean = true;

procedure TForm1.StartClick(Sender: TObject);{tu startuje}
begin
repeat

if stop=false then begin
break;
end;

if stop=true then begin

n:=n+1;
Application.ProcessMessages;

until n=500000;

A stop

procedure TForm1.Button1Click(Sender: TObject);
begin
if Stop=true then stop:=false else stop:=true;
Start.Click;
Application.ProcessMessages;
end;

0

Jezeli to Delphi to wątki i Suspend/Resume.

1 użytkowników online, w tym zalogowanych: 0, gości: 1