![]() |
schleife unterbrechech und fortsetzen?
Hi @ all
gibt es eine möglichkeit eine Schleife anzuhalten (ja klar das geht wäre ja schlimm wenn nicht :roll:) aber wie kann ich dann die schleife dann weiterlaufen lassen von genau dem punkt an wo die stehengeblieben ist :?:
Delphi-Quellcode:
so hier mal schnell nen code damit es etwas anschaulicher wird.
procedure delay(MILLISEC:integer;edit2,edit3,edit4:tedit);
var Tick:Dword; x,a:integer; b:extended; begin edit1.text:=inttostr(GetTickCount); MILLISEC:=strtoint(edit2.text); Tick := GetTickCount + DWord(Millisec); while (Millisec > 0) do begin Application.ProcessMessages; Millisec := Tick - GetTickcount; b:=millisec; b:=b/1000; b:= RoundTo(b,-0); edit3.text:=floattostr(b); a:=strtoint(edit4.text); if a = 0 then break; end; end; Ich möchte die schleife stoppen und wieder fortsetzen. das break bricht leider die komplette schleife /procedure ab hoffentlcih hat jemand ne Idee würde mich freuen thx im vorraus mfg Xe0n |
Re: schleife unterbrechech und fortsetzen?
Ich denke mal, du kannst eine Schleife höchstens pausieren.
Dazu einfach folgendes in der Schleife aufrufen:
Delphi-Quellcode:
Wenn condition1 wahr ist, wird die Pause gestartet. Sobald condition2 wahr ist, wird die Schleife fortgesetzt.
if condition1 then
repeat Application.ProcessMessages; until condition2; |
Re: schleife unterbrechech und fortsetzen?
Du willst das Delay in Abhängigkeit von der Eingabe in Edit4 quasi "aussetzen" oder weiterlaufen lassen, ist das richtig? Dann prüfe die "Anhalte"-Bedingung doch in einer inneren Schleife, in der ein Application.ProcessMessages jedoch nicht fehlen sollte.
----- O.K. - zu spät... |
Re: schleife unterbrechech und fortsetzen?
@ tomsel jop genau :-D
und wie bau ich das oben ein ?
Delphi-Quellcode:
das müsste ich ja ersetzen
a:=strtoint(edit4.text);
if a = 0 then break;
Delphi-Quellcode:
iss das so korrekt ???
if a=0 then
repeat Application.ProcessMessages; until a<>0; mfg Xe0n |
Re: schleife unterbrechech und fortsetzen?
Genau. Aber a:=strtoint(edit4.text); würde ich vorher schon noch aufrufen.
|
Re: schleife unterbrechech und fortsetzen?
Zitat:
Sleep(). Von außen gesteuert aber innerhalb der Anwendung? In einer Single-Thread-Anwendung gar nicht. Die Schleife in einen zweiten Thread auslagern und mit geeigneten Techniken (SuspendThread() (wenn du weißt, was du tust), WaitFor*Object*()) unterbrechen. Von außerhalb der Anwendung gesteuert? WaitFor*Object*() Alle genannten Funktionen findest du im Platform SDK, das auch Teil des ![]() Je nachdem, was du machen willst, sind CriticalSections ebenfalls eine Möglichkeit, einen Thread daran zu hindern, Code auszuführen, bis jemand anderes die CriticalSection wieder freigibt. |
Re: schleife unterbrechech und fortsetzen?
Sleep würde ich nicht machen. Dann wird nämlich der ganze Prozess ausgesetzt und man kann auch die Eingabe im Edit nicht mehr ändern.
|
Re: schleife unterbrechech und fortsetzen?
@ tommie-lie
das klinkt viel zu kompliziert ich glaube es gibt noch ne einfachere methode so ungefähr richtig ??
Delphi-Quellcode:
if a=0 then
repeat Application.ProcessMessages; until begin a:=strtoint(edit4.text); a<>0 end; |
Re: schleife unterbrechech und fortsetzen?
Delphi-Quellcode:
Nee, jetzt hakt's.
if a=0 then
repeat Application.ProcessMessages; until begin a:=strtoint(edit4.text); a<>0 end; Guckst du hier:
Delphi-Quellcode:
procedure delay(MILLISEC:integer;edit2,edit3,edit4:tedit);
var Tick:Dword; x,a:integer; b:extended; begin edit1.text:=inttostr(GetTickCount); MILLISEC:=strtoint(edit2.text); Tick := GetTickCount + DWord(Millisec); while (Millisec > 0) do begin Application.ProcessMessages; Millisec := Tick - GetTickcount; b:=millisec; b:=b/1000; b:= RoundTo(b,-0); edit3.text:=floattostr(b); a:=strtoint(edit4.text); while a <> 0 do begin Application.ProcessMessages; a:=strtoint(edit4.text); end; end; end; |
Re: schleife unterbrechech und fortsetzen?
ne also das hackt bei dirjetzt aber auch sry
hmmm wenn ich jetzt das prog starte fängt der nich an zu zählen wenn ich das edit4 aud 0 änder zählt der zb 10sec runter mach dann nicht weiter wenn ich auf 1 änder zählt er auch net bleibt dann sozud´sagen hängen :( :( :(
Delphi-Quellcode:
so hab mal das probiert funzt auch soweit aber wenn ich stop drücke läuft der sche** timer noch
if a = 0 then
repeat Application.ProcessMessages until strtoint(edit4.text)<>0 ; der zählt die sec trotzdem weiter runter was sich nicht sogut macht koennte das problem zu beheben sein wenn ich ttimer := disable ?? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:26 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz