tmr模块¶
状态 | 最后更新 | API版本 |
---|---|---|
Active | 2020-1-18 | V1.00.00 |
描述¶
定时器API。
典型的定时器API操作如下:
1.调用tmr.new()
获得一个timer对象。
2.调用instance:setup()
来配置timer。
3.调用instance:start()
来启动timer。
4.如需要,调用instance:remove()
。
5.页末有示例代码。
timer:setup()¶
描述¶
配置一个定时器。
参数¶
Name | Type | Range | Usage |
---|---|---|---|
<FirstTriggerTime> | number | 0~(2^32-1) | 设置在timer:start() 之后,第一次被触发的时刻(ms单位) |
<Period> | number | 0~(2^32-1) | 设置timer的周期, 如果timer的模式是 tmr.ONESHOT , 这个参数没有作用 |
<Mode> | number | tmr.ONESHOT tmr.MANUAL_RELOAD tmr.AUTO_RELOAD |
设置timer的模式: 如果选择tmr.ONESHOT ,timer只会到期一次,时间为调用timer:start() 后的FirstTriggerTime 毫秒。如果选择tmr.MANUAL_RELOAD , timer第一次在timer:start() 调用后的FirstTriggerTime 毫秒到期, 用户需手动调用timer:reload() 来重载定时器, 下一次将在Period 毫秒后到期。如果选择tmr.AUTO_RELOAD ,timer第一次在timer:start() 调用后的FirstTriggerTime 毫秒到期, 之后每过Period 毫秒后到期一次 |
<Callback> | function | 设置timer到期时的回调函数,timer对象本身将作为回调函数的第一个参数 |
返回值¶
nil
调用例¶
cnt3 = 0
function Auto_Timer_Callback(timer_self)
cnt3 = cnt3 + 1
if cnt3 < 10 then
print('Auto-reload timer fired.','cnt3 =',cnt3,'t =',sys.gTick())
else
os.exit(0)
end
end
tim = tmr.new()
tim:setup(1000,1000,tmr.AUTO_RELOAD,Auto_Timer_Callback)
tim:start()
Example Code¶
--[[This is a demo for timer APIs. The output will be on the terminal.
Notice that the timer is ONLY triggered AFTER THE SCRIPT EXITED and entered the EVENT LOOP. Therefore, if you want to use this API, your whole programme should be event-driven.
Detailed Documentation:
Version: 191111
Author: yanke928]]
cnt1=0
cnt2=0
cnt3=0
function OneShot_Timer_Callback(timer_self)
cnt1 = cnt1 + 1
print('Oneshot timer fired. Starting tim2.','cnt1 =',cnt1,'t =',sys.gTick())
tim2:start()
end
function ManualReload_Timer_Callback(timer_self)
cnt2 = cnt2 + 1
if cnt2 < 5 then
print('Manual-reload timer fired, reloading.','cnt2 =',cnt2,'t =',sys.gTick())
timer_self:reload()
else
print('Manual-reload timer fired, starting tim3','cnt2 =',cnt2,'t =',sys.gTick())
tim3:start()
end
end
function Auto_Timer_Callback(timer_self)
cnt3 = cnt3 + 1
if cnt3 < 10 then
print('Auto-reload timer fired.','cnt3 =',cnt3,'t =',sys.gTick())
else
print('Demo is over')
os.exit(0)
end
end
tim1 = tmr.new()
tim1:setup(1000,1000,tmr.ONESHOT,OneShot_Timer_Callback)
--{startDelay} {interval} {mode} {callback}
tim1:start()
tim2 = tmr.new()
tim2:setup(1000,1000,tmr.MANUAL_RELOAD,ManualReload_Timer_Callback)
tim3 = tmr.new()
tim3:setup(1000,1000,tmr.AUTO_RELOAD,Auto_Timer_Callback)