AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi gibt es eine Message bei Uhrzeit Änderung (jede Sekunde)?
Thema durchsuchen
Ansicht
Themen-Optionen

gibt es eine Message bei Uhrzeit Änderung (jede Sekunde)?

Ein Thema von DerDan · begonnen am 20. Nov 2008 · letzter Beitrag vom 25. Nov 2008
Antwort Antwort
Seite 2 von 4     12 34      
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#11

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

  Alt 20. Nov 2008, 18:42
Da es ihm nur um Sekunden geht, sollte es aber reichen
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#12

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

  Alt 20. Nov 2008, 18:52
Du könntest die momentane Zeit abfragen, und dann einen Timer starten mit dem Intervall 1000-Millisekunden der also ungefähr dann auslöst, wenn der nächste sekundensprung erfolgt. Dann einfach im OnTimerEvent wiederum das Intervall setzen ...

Rein aus Interesse: Ich habe bereits 2 Uhren (Tna+Sidebar) beide zeigen nur die Minute an, und auch die Windowsuhr "ruckelt". Ist es wirlich so schlimm, wenn die Sekundenzeiger nicht perfekt synchron sind?
  Mit Zitat antworten Zitat
Cyf

Registriert seit: 30. Mai 2008
407 Beiträge
 
Lazarus
 
#13

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

  Alt 20. Nov 2008, 18:52
Zitat von DerDan:
Zitat von Cyf:
Wenn es nicht um absolute Genauigkeit geht, würd ich auch sagen, am einfachsten wäre OnTimer oder eine Schleife mit GetTickCount und Sleep(1000).
Pollen ist genau das, was ich nicht möchte. Warum hab ich weiter oben erklärt.


mfg

DerDan
Imho wird es keine andere Möglichkeit geben, es ist mir auch nicht gelungen, dass hängen des Uhrzeigers zu reproduzieren (Vista). Ich verstehe nicht ganz, wo bei solchen Anwendungen das Problem liegt, das ganze per Timer oder Sleep (eventuel mit entsprechend kleinerem Zeitintervall, das Teiler des Zeitintervalls ist) zu machen. An jede Anwendung jede Sekunde eine Message zu schicken, wäre für Windows auch nicht sehr performant. Probleme könnte es hier nur bei Intervallen <50 ms geben.
Sollten die Ungenauigkeiten zu groß werden, kann man immernoch QP-Counter verwenden und/oder timebased movement.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#14

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

  Alt 20. Nov 2008, 19:01
Ein Timer mit einem Interval von 1000ms ist "ungenau", denn dann könnte der Sekundenzeiger 1,9883 Sekunden hängen, um danach -hüpf-hüpf- zwei Striche innerhalb von +/-100ms weiterzuhüpfen. Abhilfe: Alle 200ms prüfen.

Du kannst das natürlich auch mit einem Thread lösen, der per sleep(100) die Zeit prüft und nach Sekundenwechsel ein Event auslöst (oder von mir aus eine Message).

Falls das keine sportiliche Übung ist, würde ich mir über den sin einers 'echten' Sekundenzeigers mal Gedanken machen.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.859 Beiträge
 
Delphi 11 Alexandria
 
#15

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

  Alt 20. Nov 2008, 19:21
Hallo,

für die Anzeige einer Uhr finde ich ist es eigentlich ausreichend mit einem Timer zu arbeiten.

Bis bald Chemiker
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
Cyf

Registriert seit: 30. Mai 2008
407 Beiträge
 
Lazarus
 
#16

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

  Alt 20. Nov 2008, 19:30
Zitat von alzaimar:
Ein Timer mit einem Interval von 1000ms ist "ungenau", denn dann könnte der Sekundenzeiger 1,9883 Sekunden hängen, um danach -hüpf-hüpf- zwei Striche innerhalb von +/-100ms weiterzuhüpfen. Abhilfe: Alle 200ms prüfen.
Zitat:
(eventuell mit entsprechend kleinerem Zeitintervall, das Teiler des Zeitintervalls ist)
Zitat von alzaimar:
Event auslöst (oder von mir aus eine Message).
Messages sind hier eigentlich keine gute Idee, da man ja nicht versprechen kann, dass eine solche Message auch sofort ausgewertet wird, was nützt es in einer Funktion außerhalb der Message-Schleife zu stecken und dann 3x eine "Sekunde rum"-Nachricht zu erhalten. (selbes gilt natürlich auch für das Timer-Event klar, am Ende läuft alles sowieso drauf raus, irgendwo in einer Schleife zu prüfen)
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#17

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

  Alt 20. Nov 2008, 19:34
Er wollte eine Message, also kann er sich eine basteln. Wir sind doch hier generös, gell?

Aber Dein Einwand ist korrekt.

Edit: Die Lösungsvorschläge erinnern mich langsam an den 'Zahlen negieren' Thread.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#18

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

  Alt 21. Nov 2008, 10:12
Hallo,

schau mal hier in Post #13, damit solltest Du Dir einen Timer zusammenbasteln können, der eine Genauigkeit von 1 Millisekunde erreicht.
  Mit Zitat antworten Zitat
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#19

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

  Alt 21. Nov 2008, 11:08
Zitat von DerDan:
...
Pollen ist genau das, was ich nicht möchte. Warum hab ich weiter oben erklärt.
Hallo,

Pollen ist natürlich genauso "unelegant" wie ein Versenden einer Sekunden-Message an alle Anwendungen. Wenn du das aber ernsthaft vermeiden willst, musst du wohl in die Treiberprogrammierung von Windows einsteigen und das Uhrzeitsystem soweit modifizieren, dass es deinem Programm (!) eine entsprechende hochpriorisierte Message schickt, wenn die Sekunde wechselt. Das läuft mehr oder weniger darauf hinaus, Windows zumindest teilsweise in ein Echtzeitsystem umzubauen, dafür haben manche Firmen mit hochqualifizierten Leuten schon Mann-Jahrzehnte investiert. Sonst würde nämlich immer wieder mal ein I/O das zeitgenaue Absenden der Message ebenso wie den Empfang blockieren.

Ich schätze dass der Aufwand durchaus im Bereich von Mio EUR liegt. Ob das eine genaue Sekundenanzeige wert ist? Ich würde mir eine Funkuhr kaufen (nicht jede hat so eine genaue Sekundenanzeige!).

Gruss Reinhard

PS die Erfahrungen mit Echtzeit und Windows zeigen, dass man eine genaue Sekundensoftware besser ganz aus Windows mit seinen Messages herausnimmt und nur auf der Echtzeitebene behandelt.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#20

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

  Alt 21. Nov 2008, 11:16
Ein Timer auf 1000m macht sich nicht so gut, für die sekundengenaue Darstellung, da so ja mal eine Sekunde übergangen werden kann (Timer, GetTickCount und Co. arbeiten ja ungenau).

Aber ein Timer auf 100 oder 200 MS verbraucht erstmal nicht viele Systemresoursen und für das menschliche Gefühl, fällt eine Verzögerung von diesen Zeiten kaum auf.
$2B or not $2B
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:21 Uhr.
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