PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Pause in einer Prozedur


Noreux
04.06.2002, 16:04
hi, hab da noch ne kleine Frage... Kennt einer von euch einen Code, mit dem ich eine Pause in eine Prozedur einbauen kann? Der Befehl
Sleep(1000);
bringt mir nichts, da dieser Befehl die komplette Prozedur stoppt, und nach dem interval weitermacht. ich bräuchte aber so einen ähnlichen befehl, der aber nicht das komplette Programm stoppt sondern das alles andere weiter laufen kann.
danke!


xOOn
04.06.2002, 17:02
schau dir mal die funktion GetTickCount an

Felix Kaiser
04.06.2002, 22:57
const
OneSecond = 1/86400;
var
TimeOut: TDateTime;
begin
{ erster Teil der Prozedur }
TimeOut:= Now+OneSecond;
while Now < TimeOut do begin
Sleep(1);
Application.ProcessMessages;
end;
{ zweiter Teil der Prozedur, nach Wartezeit von 1 Sek. }
end;

Damit erzielst du das Ergebnis effektiv, GetTickCount kannste knicken, zumal nach 28.7 Tagen das Ergebnis eh unbrauchbar wird (Overflow). Machs lieber über die Funktion Now und einen TimeOut Wert. Application.ProcessMessages sorgt dafür, dass die Anwendung weiterarbeiten kann, Sleep sorgt dafür, dass der Leerlaufprozess anspringt, zwischendurch, um während der Wartephase eine CPU Auslastung von 100% zu meiden und so Rechenkapazitäten an andere Anwendungen abzugeben.

xOOn
05.06.2002, 08:36
Application.ProcessMessages kann riskant sein, setz sicherheits halber deine form auf enabled=false weil sonst kann er in der form weiternavigieren und ggf die gleiche routine nochmal ausfuehren usw, und in dieser zeit laesst sich das prog nur auf die harte art killen, mit auf x klicken und weg issen geht da nichts mehr!

Felix Kaiser
05.06.2002, 11:59
Mir fiel auf, dass ein Klick auf X in einer solchen Schleife nichts bewirkt, Grund vermag sein, dass die entsprechende Botschaft zwar bearbeitet wird, aber nicht vollständig, der Standardhandler in Application.Run sorgt dann erst glaube dafür, dass die Anwendung auch wirklich beendet wird. Application.ProcessMessages springt in so einem Fall nämlich afaik nur zum Caller, in dem Fall die Schleife und die Schleife macht ja trotzdem weiter, eben solange bis der TimeOut erreicht ist.