Page 1 of 1

SetTimer accuracy

Posted: Wed Oct 06, 2004 10:43 am
by wilbert
Code updated For 5.20+

Does anyone know a way to set an accurate timed callback ?
My testing code below, shows that setTimer isn't accurate and won't work for high speeds. :?

Code: Select all

Global startTimer, myTimer, frames, fps

fps = 60

hWND = OpenWindow(0, 0, 0, 340, 70, "SetTimer test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)



TextGadget(0, 20, 16, 140, 24, "Animation speed : " + Str(fps) + " fps")
TrackBarGadget(1, 20, 40, 300, 25, 10, 200)
SetGadgetState(1, fps)

Procedure TimerProc(hwnd,uMsg,idEvent,dwTime)
  frames + 1
  SetGadgetText(0,StrF(frames/((dwTime - startTimer)/1000)) + " FPS / " + Str(fps) + " FPS")
EndProcedure   

myTimer = SetTimer_(0, 0, 1000 / fps, @TimerProc() )
frames = 0
startTimer = GetTickCount_()

Repeat
  EventID = WaitWindowEvent()   
  If EventID = #PB_Event_Gadget
    Select EventGadget()
      Case 1
        fps = GetGadgetState(1)
        KillTimer_(0, myTimer)
        myTimer = SetTimer_(0, 0, Int(1000 / fps), @TimerProc() )
        frames = 0
        startTimer = GetTickCount_()
    EndSelect
  EndIf
Until EventID = #PB_Event_CloseWindow

KillTimer_(0, myTimer)

End

Posted: Wed Oct 06, 2004 3:36 pm
by einander
Wilbert:
You can try the high resolution timer procedures StartTimer() and
EndTimer(), part of Danilo's PureTools.