Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Alternative zu SLEEP (https://www.delphipraxis.net/66989-alternative-zu-sleep.html)

qb-tim 7. Apr 2006 13:40


Alternative zu SLEEP
 
Ich wollte in meinen Programm eine Wartezeit einbauen. Dazu benutzte ich
Delphi-Quellcode:
//...
sleep(500);
//...
Aber ich bemerkte die Wartezeit garnicht.

An einem Testprogramm ist es noch deutlicher:

Delphi-Quellcode:
//... procedure für den Knopfdruck von Button1
begin
 Label1.Caption:='Tschüß'; //Label1 ist schon vorhanden
 sleep(500);
 close;
end;
//...
Wieso bemerkt man keine Wartezeit?

PS: auch bei einer viel größeren Zahl bemerkt man ebenso nichts!

Evian 7. Apr 2006 13:42

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.

qb-tim 7. Apr 2006 13:47

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:

Evian 7. Apr 2006 13:52

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:
for i := 1 to 1500 do
  BEGIN
    sleep(1);
    application.ProcessMessages;
  END;
da gibt es sicher noch elegantere Sachen, aber es funtzt auf jeden Fall.

Sharky 7. Apr 2006 13:54

Re: Alternative zu SLEEP
 
Hai ihr zwei,

schaut euch doch man Hagens Beitrag in der CodeLibrary zu dem Thema an.

Edit: Ein "ich" in "euch" umgewandelt hat. :oops:

Angel4585 7. Apr 2006 13:56

Re: Alternative zu SLEEP
 
ich mach das (manchmal) so:

Delphi-Quellcode:
uses DateUtils;
.
.
procedure Wait(Ams : Integer);
var ZP : TDateTime;
begin
ZP:=IncMilliSecond(Now,Ams);
while ZP > Now do
  Application.ProcessMessages;
end;
Ist ne, wie ich finde, sehr amüsante Alternative :stupid:

Evian 7. Apr 2006 14:03

Re: Alternative zu SLEEP
 
nice! :thumb: gefällt mir sogar noch besser, als der Code von Hagen :)

shmia 7. Apr 2006 14:08

Re: Alternative zu SLEEP
 
Zitat:

Zitat von Sharky
schaut ich doch man Hagens Beitrag in der CodeLibrary zu dem Thema an.

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;

himitsu 7. Apr 2006 14:11

Re: Alternative zu SLEEP
 
Zitat:

Zitat von Evian
Delphi-Quellcode:
for i := 1 to 1500 do
  BEGIN
    sleep(1);
    application.ProcessMessages;
  END;
da gibt es sicher noch elegantere Sachen, aber es funtzt auf jeden Fall.

ProcessMessages braucht Zeit und Sleep mit einer Millisekunde = unmöglich.

Also dürfte da wohl mehr als 1,5 Sekunden rauskommen ;)

Khabarakh 7. Apr 2006 14:15

Re: Alternative zu SLEEP
 
Zitat:

Zitat von Evian
nice! :thumb: gefällt mir sogar noch besser, als der Code von Hagen :)

Ist mein Ironiedetektor kaputt oder ist das wirklich ernstgemeint o.O ?


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:47 Uhr.
Seite 1 von 2  1 2      

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