Seite 1 von 1

Windows-API Timer

Verfasst: 10.04.2011 07:46
von RatProject
Hallo,

Ich habe ein Verständnisproblem bezüglich des Windows-API Timer:

Code: Alles auswählen

SetTimer_(WindowID(0),0,50,@MyProcedure())
Dies sollte doch wohl alle 50 Millisekunden meine Prozedur aufrufen.
Tatsächlich geschieht das aber nur alle 62,5 ms bzw. 1/16 Sekunde! Offenbar bekomme ich nur Binär-Bruchteile einer Sekunde, ein Wert von 25 führt also dementsprechend zu einem Intervall von 31,25 ms bzw. 1/32 Sekunde usw.

Habe ich hier einen Denkfehler? :o
Es gibt hier im Forum zahlreiche Themen bezüglich Timer-Programmierung, aber speziell hierzu habe ich nichts gefunden. Sorry, wenn ich etwas übersehen haben sollte und danke schon mal im voraus für eure Hilfe!

Re: Windows-API Timer

Verfasst: 10.04.2011 08:22
von ts-soft
Der zweite Wert sollte ein Nicht-Null Wert sein. Die Timerprocedure muß 4 Parameter haben:
http://msdn.microsoft.com/en-us/library ... 85%29.aspx

Hier nochmal SetTimer: http://msdn.microsoft.com/en-us/library ... 85%29.aspx

Die Genauigkeit beträgt bei aktuellen Windowsversionen ca. 20 ms.

Re: Windows-API Timer

Verfasst: 10.04.2011 09:12
von RatProject
Hallo ts-soft,

Vielen Dank für die schnelle Antwort.
Ein Wert ungleich null ändert leider nichts an dem Verhalten. Hier mal ein Testcode:

Code: Alles auswählen

Global time

Procedure timer1(hwnd,uiMsg,idEvent,dwTime)
 Debug ElapsedMilliseconds()-time
EndProcedure

OpenWindow(0,0,0,100,100,#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_SizeGadget,"Timertest")
time=ElapsedMilliseconds()
SetTimer_(WindowID(0),1,50,@timer1())

Repeat
 event=WaitWindowEvent()
Until event=#PB_EventCloseWindow


Dies gibt bei mir Werte im Abstand von 62,5 aus... ich könnte statt elapsedmilliseconds() hier auch dwTime verwenden, ergibt das gleiche.
Ich verwende eine ältere Version von PB (3.90), könnte es damit zu tun haben? Betriebssystem ist Windows7.

Re: Windows-API Timer

Verfasst: 10.04.2011 09:35
von ts-soft
Der Timer hat eine sehr geringe Priorität und ist nicht zum Zeitmessen geeignet.
Das hat auch nichts mit der PB Version zu tun. Abweichungen von 20 ms sind
normal, können bei grösserer Auslastung des Systems auch mehr werden.

Re: Windows-API Timer

Verfasst: 10.04.2011 09:57
von RatProject
Ok, dann bin da jetzt etwas schlauer.
Das Intervall von 62,5 ms ist bei mir auch bei großer Auslastung stabil und für meinen Anwendungsfall völlig ausreichend, mich hatten lediglich die Werte überrascht... bei einem Wert von 100 beträgt das Intervall dann auch tatsächlich ganz exakt 125 ms!

Danke nochmal für die Hilfe!