Einzelnen Beitrag anzeigen

Benutzerbild von Xong
Xong

Registriert seit: 9. Jan 2008
186 Beiträge
 
Delphi 2006 Professional
 
#15

Re: Problem mit Delay

  Alt 18. Feb 2008, 11:40
Zitat von sirius:
@Xong: Dein letztes Beispiel ist aber falsch.
Du musst milliseconds schon aktualisieren.
Du hast natürlich recht. Ich bin wohl heute etwas unkonzentriert.
Dafür habe ich eine(n) Erklärung(sversuch) für den Überlauf.

Milliseconds := Tick - GetTickcount Irgendwann wird Tick kleiner GetTickcount. Da aber GetTickcount vorzeichenlos ist, nehme ich an, dass das Ergebnis von "Tick-GetTickcount" ebenfalls vorzeichenlos gespeichert wird. Es kommt also bei der Berechnung zum Überlauf, nicht bei der Zuweisung. Die Lösung ist einfach: Man muss die Operanden vorher in VZ-behaftete Variablen casten.

Alternativ kann man aber auch meinen Code nutzen (, welcher jetzt hoffentlich richtig ist. =) ):
Delphi-Quellcode:
procedure Delay(Milliseconds: Cardinal);
var
  Tick: Cardinal;
  Event: THandle;
begin
  Event := CreateEvent(nil, False, False, nil);
  try
    Tick := GetTickCount + Milliseconds;
    while (Tick > GetTickcount) and
          (MsgWaitForMultipleObjects(1, Event, False, Tick-GetTickCount, QS_ALLINPUT) <> WAIT_TIMEOUT) do
    begin
      Application.ProcessMessages;
    end;
  finally
    CloseHandle(Event);
  end;
end;
  Mit Zitat antworten Zitat