Code archives/Algorithms/Asynchronous timers

This code has been declared by its author to be Public Domain code.

Download source code

Asynchronous timers by BlitzSupport2001
This stuff lets you add asynchronous timers and execute code when they expire. If you set them again when they expire, the code can therefore be executed on a regular basis, while your game continues as normal (the normal timer functions pause execution of the whole program until they run out).
; Timer structure:

Type Timer
	Field start
	Field timeOut
End Type

; Set a timer:

Function SetTimer.Timer (timeOut)
	t.Timer = New Timer
	t\start   = MilliSecs ()
	t\timeOut = t\start + timeOut
	Return t
End Function

; Check for timeout:

Function TimeOut (test.Timer)
	If test <> Null
		If test\timeOut < MilliSecs ()
			Delete test
			Return 1
		EndIf
	EndIf
End Function

Graphics 640, 480
SetBuffer BackBuffer ()

; Set timer before main loop:
t.Timer = SetTimer (1000)

Repeat

	Cls

	; If timer runs out, add another "o" and reset the timer:
	If TimeOut (t)
		a$ = a$ + "o"
		t = SetTimer (1000)
	EndIf
	
    ; This stuff carries on regardless:
	Rect MouseX (), MouseY (), 20, 20
	Text 0, 0, a$
	
	Flip
	
Until KeyHit (1)

End

Comments

Mikorians2013
Be aware of the flaw:
Millisecs() scrolls to 0 at midnight.

I always use:
If Abs(millisecs()-recordedtime)>desirednummillisecs then ...

It's not perfect, but will keep you from a midnight stall.


Code Archives Forum