Delphi-PRAXiS
Seite 4 von 4   « Erste     234   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi gibt es eine Message bei Uhrzeit Änderung (jede Sekunde)? (https://www.delphipraxis.net/124535-gibt-es-eine-message-bei-uhrzeit-aenderung-jede-sekunde.html)

jfheins 22. Nov 2008 09:55

Re: gibt es eine Message bei Uhrzeit Änderung (jede Sekunde)
 
Zitat:

Zitat von Macci
Hi,

klar kannst du Windows dazu veranlassen, deinem Programm jede Sekunde eine Message zu schicken.

Das Zauberwort heisst "SetTimer". Du erhältst dann Messages des Typs WM_TIMER von Windows. (Nicht zu verwechseln mit dem Timer-Steuerelement von Delphi).

Ähh .. natürlich nicht zu verwechseln ... denn es ist ja das gleiche in Grün, nur einmal als Klasse gekapselt und einmal nicht :mrgreen:

Außerdem sorgt der Timer ja nicht (wie gewünscht) dass bei jedem Sekundenwechsel eine Message gesendet wird, sondern nur sekündlich. Bei letzerem bleibt eben immer ein Offset von bis zu knapp unter einer Sekunde ;)

Macci 22. Nov 2008 14:34

Re: gibt es eine Message bei Uhrzeit Änderung (jede Sekunde)
 
Zitat:

Zitat von jfheins
Außerdem sorgt der Timer ja nicht (wie gewünscht) dass bei jedem Sekundenwechsel eine Message gesendet wird, sondern nur sekündlich. Bei letzerem bleibt eben immer ein Offset von bis zu knapp unter einer Sekunde ;)

Hmm okay.. am besten wäre es dann wohl, einen Timer mit einem kurzen Zeitintervall zu starten (z.B. 10 ms) und sich die letzte Uhrzeit immer zu merken. Auf diese Weise wäre die Verzögerung weniger als 1/100-Sekunde, und somit von keinem Menschen bemerkbar. Über Performace bräuchtest du dir da auch keine Gedanken machen, denn 100 Messages pro Sekunde entsprechen einer CPU-Last von 0,0% (gerundet) ;-)

Viele Gruesse,
Macci

DerDan 22. Nov 2008 15:13

Re: gibt es eine Message bei Uhrzeit Änderung (jede Sekunde)
 
Zitat:

Zitat von Macci
Zitat:

Zitat von jfheins
Außerdem sorgt der Timer ja nicht (wie gewünscht) dass bei jedem Sekundenwechsel eine Message gesendet wird, sondern nur sekündlich. Bei letzerem bleibt eben immer ein Offset von bis zu knapp unter einer Sekunde ;)

Hmm okay.. am besten wäre es dann wohl, einen Timer mit einem kurzen Zeitintervall zu starten (z.B. 10 ms) und sich die letzte Uhrzeit immer zu merken. Auf diese Weise wäre die Verzögerung weniger als 1/100-Sekunde, und somit von keinem Menschen bemerkbar. Über Performace bräuchtest du dir da auch keine Gedanken machen, denn 100 Messages pro Sekunde entsprechen einer CPU-Last von 0,0% (gerundet) ;-)

Viele Gruesse,
Macci

Wobei ich dann fast wieder bei meiner Lösung bin. Beitrag 23

Vielen Dank

himitsu 25. Nov 2008 11:25

Re: gibt es eine Message bei Uhrzeit Änderung (jede Sekunde)
 
nochmal kurz zu
Zitat:

Zitat von Macci
(Nicht zu verwechseln mit dem Timer-Steuerelement von Delphi)

Code:
procedure TTimer.UpdateTimer;
begin
  [b]KillTimer[/b](FWindowHandle, 1);
  if (FInterval <> 0) and FEnabled and Assigned(FOnTimer) then
    if [b]SetTimer[/b](FWindowHandle, 1, FInterval, nil) = 0 then
      raise EOutOfResources.Create(SNoTimers);
end;
Ja und es wird nicht jede Sekunde das Event ausgelöst ... wenn dein Programm z.B. 10 Sekunden lang seine Nachrichten (Messages) nicht bearbeitet, dann sind nicht (wie man vielleicht denken könnte) auch 10 Timer-Nachrichten in der Liste, sondern nur eine.

Auserdem arbeitet Windows ja nicht genau und es kommt nicht aller "genau" 'ner Sekunde ein Ereignis rein (wenn windows oder ein Programm aus-/überlastet ist, dann kann es auch mal verspätet eintreffen)

sirius 25. Nov 2008 11:49

Re: gibt es eine Message bei Uhrzeit Änderung (jede Sekunde)
 
Also ich wäre ja bei folgender Überlegung stutzig geworden:
Zitat:

Zitat von DerDan
Wenn man sich nun die analoge Uhr anschaut, die bei Windows mitgeliefert wird, dann fällt dort auf das der Sekundenzeiger nicht genau jede Sekunde weiterwandert. manchmal "hängt" der Zeige eine kurze Weile.
-> Einfach mal eine Weile beobachten.

Dann hätte ich mir gedacht, dass, wenn Microsoft keine sekundengenaue Uhr in seine GUI: Windows einbaut, dann wird es wohl tief im Inneren von Windows auch keine dementsprechende Möglichkeit (oder Message) geben. :zwinker:

himitsu 25. Nov 2008 11:58

Re: gibt es eine Message bei Uhrzeit Änderung (jede Sekunde)
 
Zitat:

Zitat von sirius
Dann hätte ich mir gedacht, dass, wenn Microsoft keine sekundengenaue Uhr in seine GUI: Windows einbaut, dann wird es wohl tief im Inneren von Windows auch keine dementsprechende Möglichkeit (oder Message) geben. :zwinker:

Das hängt aber auch noch damit zusammen, daß der Prozess, welcher unter Anderem die Uhr zeichnet,
mit einer geringen Prozesspriorität läuft, da sie ja anderen Programmen nicht viel Rechnenleistung klauen soll ... somit bleibt sie auch schonmal Minutenlang stehen, wenn der PC ausgelastet ist.

Mit einer hohen Prozess-/Threadpriorität und einem HighRessolutionTimer (Bei Google suchenMultimediatimer/Hier im Forum suchenMultimediatimer) könnte man zwar genauer Arbeiten und die Uhr "besser/genauer" darstellen, aber das wär' dann wie mit Kanonen auf Spatzen schießen.

Macci 25. Nov 2008 14:55

Re: gibt es eine Message bei Uhrzeit Änderung (jede Sekunde)
 
Zitat:

Zitat von himitsu
Ja und es wird nicht jede Sekunde das Event ausgelöst ... wenn dein Programm z.B. 10 Sekunden lang seine Nachrichten (Messages) nicht bearbeitet, dann sind nicht (wie man vielleicht denken könnte) auch 10 Timer-Nachrichten in der Liste, sondern nur eine.

Japp, genau deswegen darf man das Timersteuerelement nicht mit den entsprechenden Windows API Funktionen verwechseln. :-D Ich habe deswegen auch auf die APIs hingewiesen, weil @DerDan ausdrücklich MESSAGES wollte.

Viele Grüsse,
Macci


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:03 Uhr.
Seite 4 von 4   « Erste     234   

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