Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Neuen Beitrag zur Code-Library hinzufügen (https://www.delphipraxis.net/33-neuen-beitrag-zur-code-library-hinzufuegen/)
-   -   Delphi Delay (https://www.delphipraxis.net/169718-delay.html)

himitsu 7. Aug 2012 15:13

Delay
 
Man könnte doch bestimmt mal diese Beiden zusammenfassen (is ja das Selbe und auch noch vom Gleichen)
http://www.delphipraxis.net/96-delay-delphi.html
http://www.delphipraxis.net/2637-anw...zufrieren.html

dann entfernen und im dritten Eintrag integrieren.
http://www.delphipraxis.net/6620-delay.html

lbccaleb 8. Aug 2012 17:45

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;

himitsu 8. Aug 2012 18:46

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.

DeddyH 8. Aug 2012 19:28

AW: Delay
 
Wie, Unicode? An welcher Stelle sind denn da Strings o.ä. im Spiel? :gruebel:

himitsu 8. Aug 2012 19:30

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;

hathor 8. Aug 2012 20:15

AW: Delay
 
Ehrlich gesagt: Ich halte dieses Delay für grossen Mist!

http://support.microsoft.com/kb/172338/de
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!

p80286 8. Aug 2012 21:12

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

jaenicke 8. Aug 2012 21:53

AW: Delay
 
Zitat:

Zitat von hathor (Beitrag 1177406)
Warum wird in schöner Regelmäßigkeit dieser uralte Mist ausgekramt:
Bei manchen ist wohl die Zeit bei 1982 stehengeblieben!

Und was ist daran schlecht? Windows ist kein Echtzeitbetriebssystem, insofern ist mir das doch bei einem Aufruf von Delay total egal, ob die Genauigkeit ein paar Millisekunden beträgt... Wozu soll ich da unbedingt nen PerformanceCounter nehmen? :roll:

himitsu 8. Aug 2012 22:07

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)

Furtbichler 9. Aug 2012 07:05

AW: Delay
 
hathor hat vielleicht gestern abend ein schlechtes Bier getrunken.
Oder gar keins :stupid:


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:49 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