![]() |
Alternative zu SLEEP
Ich wollte in meinen Programm eine Wartezeit einbauen. Dazu benutzte ich
Delphi-Quellcode:
Aber ich bemerkte die Wartezeit garnicht.
//...
sleep(500); //... An einem Testprogramm ist es noch deutlicher:
Delphi-Quellcode:
Wieso bemerkt man keine Wartezeit?
//... procedure für den Knopfdruck von Button1
begin Label1.Caption:='Tschüß'; //Label1 ist schon vorhanden sleep(500); close; end; //... PS: auch bei einer viel größeren Zahl bemerkt man ebenso nichts! |
Re: Alternative zu SLEEP
naja der Wert den Du an sleep übergibst ist in millisekunden angegeben.. 500 ist dann also eine halbe sekunde. Wenn Du den Wert auf sagen wir 5000 festlegst, solltest Du schon eine Pause bemerken.
|
Re: Alternative zu SLEEP
Hm,...
Das stimmt. In meinem Testprogramm merkt man schon was wenn sleep über 1500 ist... In meinem anderen Programm muss ich dann nach was anderem suchen... :oops: |
Re: Alternative zu SLEEP
naja das Problem was ich mit sleep habe ist, dass das Programm einfriert, wenn man einfach nur sleep nutzt, so lange die Prozedur aktiv ist.
Um das zu umgehen, mach ich mir ne Schleife mit prezssmasges drinn. z.B. so:
Delphi-Quellcode:
da gibt es sicher noch elegantere Sachen, aber es funtzt auf jeden Fall.
for i := 1 to 1500 do
BEGIN sleep(1); application.ProcessMessages; END; |
Re: Alternative zu SLEEP
|
Re: Alternative zu SLEEP
ich mach das (manchmal) so:
Delphi-Quellcode:
Ist ne, wie ich finde, sehr amüsante Alternative :stupid:
uses DateUtils;
. . procedure Wait(Ams : Integer); var ZP : TDateTime; begin ZP:=IncMilliSecond(Now,Ams); while ZP > Now do Application.ProcessMessages; end; |
Re: Alternative zu SLEEP
nice! :thumb: gefällt mir sogar noch besser, als der Code von Hagen :)
|
Re: Alternative zu SLEEP
Dann kommt hier "Delay revisited #2":
Man sollte den Delay unterbrechen, wenn die Anwendung beendet wurde.
Delphi-Quellcode:
procedure Delay(Milliseconds: Integer);
var Tick: DWord; Event: THandle; begin Event := CreateEvent(nil, False, False, nil); try Tick := GetTickCount + DWord(Milliseconds); while (Milliseconds > 0) and (MsgWaitForMultipleObjects(1, Event, False, Milliseconds, QS_ALLINPUT) <> WAIT_TIMEOUT) do begin Application.ProcessMessages; if Application.Terminated then Exit; // <===== NEU Milliseconds := Tick - GetTickcount; end; finally CloseHandle(Event); end; end; |
Re: Alternative zu SLEEP
Zitat:
Also dürfte da wohl mehr als 1,5 Sekunden rauskommen ;) |
Re: Alternative zu SLEEP
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:21 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