![]() |
Delay
Man könnte doch bestimmt mal diese Beiden zusammenfassen (is ja das Selbe und auch noch vom Gleichen)
![]() ![]() dann entfernen und im dritten Eintrag integrieren. ![]() |
AW: Delay
Man könnte doch die beiden Versionen auch noch wieder kombinieren, von toms und negaH (so hat man ne Ressourcen sparende nonVCL Version):
Delphi-Quellcode:
procedure Delay(Milliseconds: Integer);
var Tick: DWord; Event: THandle; Msg: TMsg; 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; if PeekMessage(Msg, 0, 0, 0, PM_REMOVE) then begin; if Msg.message = WM_QUIT then begin; PostQuitMessage(Msg.wParam); Break; end; TranslateMessage(Msg); DispatchMessage(Msg); end; Milliseconds := Tick - GetTickcount; end; finally CloseHandle(Event); end; end; |
AW: Delay
Für NonVCL und bis D2007 isses so OK, aber für die VCL nicht, da dort noch mehr in der Schleife passiert und spätetens ab D2009 sollte man es für's Unicode anpassen.
|
AW: Delay
Wie, Unicode? An welcher Stelle sind denn da Strings o.ä. im Spiel? :gruebel:
|
AW: Delay
z.B. bei den TastenCodes, oder bei Messages zum Auslesen/Senden von Text, wie WM_GETTEXT?
siehe IsWindowUnicode [add]
Delphi-Quellcode:
procedure Delay(Milliseconds: Integer);
var Unicode: Boolean; Event: THandle; Tick: DWORD; Msg: TMsg; 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 if PeekMessage(Msg, 0, 0, 0, PM_NOREMOVE) then begin Unicode := (Msg.hwnd = 0) or IsWindowUnicode(Msg.hwnd); if (not Unicode and PeekMessageA(Msg, 0, 0, 0, PM_REMOVE)) or (Unicode and PeekMessageW(Msg, 0, 0, 0, PM_REMOVE)) then begin if Msg.message = WM_QUIT then begin PostQuitMessage(Msg.wParam); Break; end; TranslateMessage(Msg); if Unicode then DispatchMessageW(Msg) else DispatchMessageA(Msg); end; Milliseconds := Integer(Tick - GetTickcount); end; end; finally CloseHandle(Event); end; end; |
AW: Delay
Ehrlich gesagt: Ich halte dieses Delay für grossen Mist!
![]() Zitat: Das Betriebsystem stellt mehrere Zeitgeber mit verschiedenen Genauigkeitsstufen zur Verfügung: Funktion____________Einheit_______________________ _Genauigkeit Now, Time, Timer____Sekunden_______________________1 Sekunde GetTickCount________Millisekunden_________________ _ca. 10 ms TimeGetTime_________Millisekunden_________________ _ca. 10 ms QueryPerformanceCounter_QueryPerformanceFrequency_ _gleich Wenn Ihr System Zähler mit hoher Genauigkeit unterstützt, können Sie "QueryPerformanceCounter" und "QueryPerformanceFrequency" verwenden, um äußerst genaue Zeitmessungen durchzuführen. ---------- Warum wird in schöner Regelmäßigkeit dieser uralte Mist ausgekramt: Bei manchen ist wohl die Zeit bei 1982 stehengeblieben! |
AW: Delay
Entschuldigung, warum diese dedizierte Meinung?
Da ich mit den sog. SplashScreens nicht viel am Hut habe, nicht soo fundiert, aber das scheint mir eine typische Delay-Anwendung zu sein. Vor kurzem gab es auch ein paar Beiträge zu Diensten, und da war so wie ich das verstanden habe auch Delay im Spiel. Kann auch sein, daß ich da etwas vollkommen falsch verstanden habe, dann bitte ich um Aufklärung Gruß K-H |
AW: Delay
Zitat:
|
AW: Delay
Ich weiß auch nicht, was man gegen eine Genauigkeit von immerhin durchschnittlich 0,010 bis 0,016 Sekunden hat. (merkt eh kein Benutzer diese Abweichung)
|
AW: Delay
hathor hat vielleicht gestern abend ein schlechtes Bier getrunken.
Oder gar keins :stupid: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:45 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