Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Problem mit Delay (https://www.delphipraxis.net/41918-problem-mit-delay.html)

PaKir 10. Mär 2005 18:04


Problem mit Delay
 
Ich hab nach einer alternative zu “sleep“ und einer anderen Prozedure gesucht und das hier hier im Forum gefunden Delay revisited. Funktioniert auch eigentlich ganz gut, da die CPU-Auslastung angenehm niedrig bleibt.

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;
      Milliseconds := Tick - GetTickcount;
    end;
  finally
    CloseHandle(Event);
  end;
end;
Jetzt aber zu meinem Problem. Nach ein paar Sekunden kommt immer dieser Fehler bei "Milliseconds := Tick - GetTickcount":
http://img34.exs.cx/img34/3849/unbenannt4np.jpg
Ich hab wirklich überhaupt keine Ahnung warum. Im Normalbetrieb meines Programms ändert sich die Zeit zwar andauernd aber auch bei einem Testprogramm das immer 200msec warten soll kommt der Fehler. Wisst ihr an was das liegen kann.

mirage228 10. Mär 2005 18:17

Re: Problem mit Delay
 
Hi,

versuchs mal so, in dem Du den Typ von "Milliseconds" von Integer zu Int64 änderst.

mfG
mirage228

PaKir 10. Mär 2005 18:35

Re: Problem mit Delay
 
Habs geändert und jetzt gehts. :thumb:
Hätt ich auch selbst drauf kommen können. :oops: :duck: :oops:
Hab nur gedacht das das bei so kleinen Werten nicht an sowas liegen kann.

[EDIT]Geht doch nicht. Der Fehler kommt zwar nicht mehr so oft aber er kommt[/EDIT]

Luckie 10. Mär 2005 19:03

Re: Problem mit Delay
 
Zitat:

Zitat von PaKir
Habs geändert und jetzt gehts. :thumb:

Ob das die Lösung war, ist die Frage. Lass das Programm mal mehrere Stunden laufen. MSDN-Library durchsuchenGetTickCount liefert auch nur einen DWORD zurück. Ich sehe im Moment nichts, warum ein Int64 benötigt würde.

v2afrank 18. Feb 2008 09:16

Re: Problem mit Delay
 
Ich weiß zwar, dass der Thread hier ewig alt ist, abe gibt es dafür schon eine Lösung ?
Ich habe das Problem jetzt nämlich genauso. Interessanterweise taucht das Problem nur auf meinem XP Rechner auf. Unter Windows 2000 habe ich das Problem nicht

Xong 18. Feb 2008 09:20

Re: Problem mit Delay
 
Zitat:

Zitat von v2afrank
Ich weiß zwar, dass der Thread hier ewig alt ist, abe gibt es dafür schon eine Lösung ?
Ich habe das Problem jetzt nämlich genauso. Interessanterweise taucht das Problem nur auf meinem XP Rechner auf. Unter Windows 2000 habe ich das Problem nicht

Der gleiche Code?

v2afrank 18. Feb 2008 09:30

Re: Problem mit Delay
 
Ja, genau der gleiche Code. Als Delay habe ich 100 übergeben

shmia 18. Feb 2008 09:41

Re: Problem mit Delay
 
Delphi-Quellcode:
// Überlaufprüfung muss abgeschaltet werden:
{$Q-}
procedure Delay(Milliseconds: Integer);
...

v2afrank 18. Feb 2008 09:45

Re: Problem mit Delay
 
Ok,
danke für den Tipp werde ich machen. Aber was genau passiert denn da ?
Wenn das wirklich die Lösung ist ist sollte man dann nich auch den Beitrag in der Codelib ändern ?

Xong 18. Feb 2008 09:49

Re: Problem mit Delay
 
Delphi-Quellcode:
procedure Delay(Milliseconds: Cardinal);
var
  Tick: DWord;
  Event: THandle;
begin
  Event := CreateEvent(nil, False, False, nil);
  try
    Tick := GetTickCount + Milliseconds;
    while (Milliseconds > 0) and
          (MsgWaitForMultipleObjects(1, Event, False, Milliseconds, QS_ALLINPUT) <> WAIT_TIMEOUT) do
    begin
      Application.ProcessMessages;
      Milliseconds := Tick - GetTickcount;
    end;
  finally
    CloseHandle(Event);
  end;
end;
Ich kann es mir nur so erklären, dass GetTickCount einen vorzeichenlosen Integerwert zurückliefert, "Milliseconds" aber VZ-behaftet ist. Mit diesem Code müsste das Problem behoben sein.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:09 Uhr.
Seite 1 von 3  1 23      

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