Alternative zum Timer
-
(D)Evil schrieb:
Ts.. evt. kannst de nen thread machen... endlos schleife rein und immer nen sleep... aber das ist doch wiederlich
Was soll das bringen? Das hat dann die gleiche Auflösung wie SetTimer...
-
Nick_l. schrieb:
Gibt es eine schnellere Alternative zu SetTimer/OnTimer? Wenn ich zum Beispiel will, dass das Programm alle 20 Millisekunden etwas macht, was kann ich da schreiben?
Schau Dir mal die Multi-Media-Timer an:
http://msdn.microsoft.com/library/en-us/multimed/htm/_win32_timesetevent.asp
-
Das Minimum für OnTimer ist ja circa 50 Millisekunden.
Unterhalb 100 ms arbeitet WM_TIMER nicht exakt.
-
wieso heißt der eiegntlich multimedia timer? ist er für multimedia (video, bilder, musik) gedacht?
-
Unter Reqirements steht
Included in Windows XP only.
Ich programmiere allerdings nicht so gern mit Funktionen, die die neueste Version von Windows brauchen. Immerhin sollen meine Programme genauso gut für Leute funktionieren, die zum Beispiel noch Windows 2000 benutzen.
-
Erhard Henkes schrieb:
Das Minimum für OnTimer ist ja circa 50 Millisekunden.
Unterhalb 100 ms arbeitet WM_TIMER nicht exakt.
Was verstehst Du unter exakt???
Das ganze hängt nur von der Auflösung des OS ab. Das ist i.d.R. bei 10-20 ms. Somit arbeitet es *nie* exakt, sondern immer nur in diesem Raster.
-
Nick_l. schrieb:
Unter Reqirements steht
Included in Windows XP only.
Ich programmiere allerdings nicht so gern mit Funktionen, die die neueste Version von Windows brauchen. Immerhin sollen meine Programme genauso gut für Leute funktionieren, die zum Beispiel noch Windows 2000 benutzen.
Upps... ich würde mal sagen das ist ein Doku-Fehler.... Die Funktion gibt es schon seit NT 3.1.
In XP wurde nur ein neuer (fuEvent) Parameter hinzugefügt: "TIME_KILL_SYNCHRONOUS". Diesen gibt es nur unter XP.
Werde dies mal an MS weiterleiten...Siehe auch "timeKillEvent" (was ja das Pedant zu "timeSetEvent" ist; hier ist das min. OS NT 3.1 und Win95
-
Windows ist kein EchtzeitOS. Man kann sich da nie sicher sein das die Nachricht in dieser Zeit kommt. Da es sich dabei auch noch um eine Nachricht handelt (WM_TIMER) und Nachrichten der Reihe nach bearbeitet werden und dann auch nicht sicher ist ob das Programm die Nachrichten überhaupt sofort aus der Warteschlange holt sollte man sich nie auf den Timer verlassen.
Jochen Kalmbach schrieb:
Erhard Henkes schrieb:
Das Minimum für OnTimer ist ja circa 50 Millisekunden.
Unterhalb 100 ms arbeitet WM_TIMER nicht exakt.
Was verstehst Du unter exakt???
Das ganze hängt nur von der Auflösung des OS ab. Das ist i.d.R. bei 10-20 ms. Somit arbeitet es *nie* exakt, sondern immer nur in diesem Raster.@Jochen
Hast du bezügl. Auflösung von >= WINNT eine genaue Zahl.
Vor ca. 3 Jahren wurde das schonmal besprochen und die Auflösung genau genannt und auch warum es so ist.
Fand aber den Thread nicht mehr.
-
Unix-Tom schrieb:
Hast du bezügl. Auflösung von >= WINNT eine genaue Zahl.
Vor ca. 3 Jahren wurde das schonmal besprochen und die Auflösung genau genannt und auch warum es so ist.Die Auflösung hängt Primär von der verwendeten HAL ab (mit Auflösung ist hier der "Timer-Interrupt" gemeint, der auch das Multi-Tasking steuert).
Genauere Infos findest Du auch in dem Buch "Inside Microsoft Windows" von David Solomon und Mark E. Russinovich (Kapitel: Thread Quantum)
Du kannst es aber einfach selber rausfinden, in dem Du ein Sleep(1) machst und die Zeit mittels QueryPerformanceCounter misst. Wie gesagt i.d.R. zwischen 10 und 20 ms.
Du kannst diese Zeit drücken indem Du "timeBeginPerion(1)" aufrufst; dann bekommst Du eine Auflösung zwischen 1-2 ms. Dies hat aber systemweite Nebeneffekte, da auch das komplette Scheduling schneller wird.
Falls Du also viele Threads am laufen hast, kann es dazu führen, dass sich das OS hauptsächlich mit Scheduling beschäftigt (ist etwas übertrieben; aber es kann AFAIK sachon 1-2% der Rechneleistung bei *vielen* Threads und kurzem Timer-Interrupt wegnehmen) und die Threads nur noch wenig Zeit bekommen (da sie ja schon nach 6-36 Quantums unterbrochen werden).
-
Zur Info, hier die (vorläufige) Antwort von MS zum DOku-Problem:
Microsoft Online Customer Service Representative schrieb:
Hello,
Thank you for writing to Microsoft Customer Service.
I understand that you are reporting the incorrect information in the "timeSetEvent" Library site. I apologize for the inconvenience this may have caused you.
I am currently working with my colleagues to fix the errors on our site. I will inform you as soon as the site is updated.
Thank you,
Charisse
Microsoft Online Customer Service Representative