![]() |
Problem mit Delay
Ich hab nach einer alternative zu “sleep“ und einer anderen Prozedure gesucht und das hier hier im Forum gefunden
![]()
Delphi-Quellcode:
Jetzt aber zu meinem Problem. Nach ein paar Sekunden kommt immer dieser Fehler bei "Milliseconds := Tick - GetTickcount":
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; ![]() 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. |
Re: Problem mit Delay
Hi,
versuchs mal so, in dem Du den Typ von "Milliseconds" von Integer zu Int64 änderst. mfG mirage228 |
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] |
Re: Problem mit Delay
Zitat:
![]() |
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 |
Re: Problem mit Delay
Zitat:
|
Re: Problem mit Delay
Ja, genau der gleiche Code. Als Delay habe ich 100 übergeben
|
Re: Problem mit Delay
Delphi-Quellcode:
// Überlaufprüfung muss abgeschaltet werden:
{$Q-} procedure Delay(Milliseconds: Integer); ... |
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 ? |
Re: Problem mit Delay
Delphi-Quellcode:
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.
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:46 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-2025 by Thomas Breitkreuz