11// This example demonstrates the entire SfTimer Class usage
2- {$USE CLEO}
2+ {$CLEO}
33{$USE SAMPFUNCS}
44{$USE debug}
5+ {$USE bitwise}
56NOP
67
78Debugger.Enable()
@@ -12,9 +13,16 @@ int refIterations = 0
1213 //
1314
1415 // initialize SfTimers
15- SfTimer enablerTimerObj // global SfTimer definition, to be used later
16- SfTimer.Create(3500, @UnreferencedTimerCallback_DoSomething, 0) // don't retrieve the SfTimer handle, let's call it "UnrefTimer"
17- SfTimer myTimerObj = SfTimer.Create(5000, @ReferencedTimerCallback_DoSomething) // myTimerObj now contains the handle of this newly created SfTimer
16+ SfTimer enablerTimerObj = 0 // 0 = undefined SfTimer, to be used later
17+ if not SfTimer.Create(2000, @UnreferencedTimerCallback_DoSomething, 0) // don't retrieve the SfTimer handle, let's call it "UnrefTimer"
18+ then Debugger.Trace("Failed to Create Unreferenced SfTimer")
19+ end
20+ SfTimer myTimerObj
21+ if not myTimerObj = SfTimer.Create(5000, @ReferencedTimerCallback_DoSomething) // myTimerObj now contains the handle of this newly created SfTimer
22+ then
23+ myTimerObj = 0 // 0 = undefined SfTimer
24+ Debugger.Trace("Failed to Create myTimerObj")
25+ end
1826 //
1927
2028while true
@@ -31,31 +39,43 @@ while true
3139end
3240
3341:ReferencedTimerCallback_Enabler
34- enablerTimerObj.Delete() // delete this temporary oneshot timer
35-
36- float newInterval = Math.RandomFloatInRange(4000, 7000)
37- var newInterval:int
38- newInterval =# newInterval
39- int elapsedTime = myTimerObj.GetElapsedTime()
40- int timeLeft = myTimerObj.GetTimeLeft()
41- Debugger.Trace("elapsedTime=%d timeLeft=%d", elapsedTime, timeLeft)
42- myTimerObj.SetInteval(newInterval) // update myTimerObj's interval
43- myTimerObj.Reset() // reset myTimerObj's interval
44- myTimerObj.SetStatus(true) // resume myTimerObj
4542 Debugger.Trace("myTimerObj resumed")
46- SF_COMMAND_RETURN // end of callback
43+ if enablerTimerObj <> 0 // SfTimer is defined
44+ then
45+ if not enablerTimerObj.Delete() // delete this temporary oneshot timer
46+ then Debugger.Trace("Failed to Delete enablerTimerObj")
47+ end
48+ else Debugger.Trace("myTimerObj is Undefined")
49+ end
50+ enablerTimerObj = 0 // 0 = undefined SfTimer
51+ int newInterval = Math.RandomIntInRange(4000, 7000)
52+ myTimerObj.Reset() // the timeStamp variable sometimes overshootof reset myTimerObj's interval
53+ myTimerObj.SetInterval(newInterval) // update myTimerObj's interval
54+ myTimerObj.Reset() // reset myTimerObj's interval again
55+ if not myTimerObj.SetStatus(true) // resume myTimerObj
56+ then Debugger.Trace("Failed to Resume myTimerObj")
57+ end
58+ Sf.CmdRet() // end of callback
4759
4860:ReferencedTimerCallback_DoSomething
4961 refIterations++
5062 Debugger.Trace("Callback of myTimerObj with ID %X triggered %u times", myTimerObj, refIterations)
51- if refIterations >= 5
63+ int isResumed = refIterations % 5
64+ if isResumed == false
5265 then
53- enablerTimerObj = SfTimer.Create(3000, @ReferencedTimerCallback_Enabler) // temporarily create a oneshot timer
54- Debugger.Trace("myTimerObj Paused for 3 seconds")
66+ if not myTimerObj.SetStatus(false) // pause myTimerObj
67+ then Debugger.Trace("Failed to Pause myTimerObj")
68+ end
69+ if not enablerTimerObj = SfTimer.Create(7000, @ReferencedTimerCallback_Enabler) // temporarily create a oneshot timer
70+ then
71+ myTimerObj = 0 // 0 = undefined SfTimer
72+ Debugger.Trace("Failed to Create enablerTimerObj")
73+ end
74+ Debugger.Trace("myTimerObj Paused for 7 seconds")
5575 end
56- SF_COMMAND_RETURN // end of callback
76+ Sf.CmdRet() // end of callback
5777
5878:UnreferencedTimerCallback_DoSomething
5979 unrefIterations++
6080 Debugger.Trace("UnrefTimer's Callback triggered %u times", unrefIterations)
61- SF_COMMAND_RETURN // end of callback
81+ Sf.CmdRet() // end of callback
0 commit comments