Why don't you just disable the timer while processing the timer event, and enable it again when the event has been procesed?
I also thought about this, it would solve the problem, but I was too scared that it could cause too much system overhead to create and delete the timer permanently. The code I wrote above is just such a timer which fires only once, till you recreate it. But as you said this I tried to do so and it works! Thanks, it looks like the problem is solved now, at least my tests showed me this, but let's hear what Michael says.Strict Framework brl.blitz Import brl.d3d7max2d Import brl.glmax2d Import brl.timer Const HERTZ# = 60 Global Ending Global Timer:TTimer = CreateTimer ( HERTZ ) Global Rotation AddHook EmitEventHook , Hook AppTitle = "Rotating Rectangle" Graphics 400 , 300 While Not Ending WaitSystem Wend Function Hook:Object ( id , data:Object , context:Object ) Local Event:TEvent = TEvent ( data ) Select Event.source Case Null If Event.id = EVENT_APPTERMINATE Ending = True EndIf If Event.id = EVENT_KEYDOWN And Event.data = KEY_ESCAPE Ending = True EndIf Case Timer If Event.id = EVENT_TIMERTICK StopTimer Timer Cls SetRotation Rotation Rotation :+ 1 DrawRect 200 , 150 , 100 , 100 Flip 0 Timer = CreateTimer ( HERTZ ) EndIf EndSelect Return data EndFunction