lua实现定时器

timer_manager = {}
timer_manager.__index = timer_manager

local callback = function()
	 print("this is a callback")
end

local callback1 = function()
	 print("this is a callback1")
end

local callback2 = function()
	 print("this is a callback2")
end

-- 临时变量
local timer_id = 0
local instance = nil
function timer_manager.new()
	local o = {}
	setmetatable(o, timer_manager)
	o.timerMap = {}
	return o
end

-- 单例模式 

function timer_manager.get_instance()
	if not instance then
		instance = timer_manager.new()
	end
	return instance
end

--                               间隔   次数    回调
function timer_manager:new_timer(delta, times, cb)
	local timer = { interval = delta, loop = times, func = cb, cur = 0}
	timer_id = timer_id + 1
	self.timerMap[timer_id] = timer
	return timer_id
end 

function timer_manager:update(delta)  --此处的delta是多长时间调用update函数的时间间隔
	for k,v in pairs(self.timerMap) do
		v.cur = v.cur + delta
		while v.cur >= v.interval  do
			print("执行回调函数", v.func())
			v.cur = v.cur - v.interval
			v.loop = v.loop - 1
			if v.loop <= 0 then
				v = nil
				break
			end
		end
	end
end

-- timer_id由new_timer返回 停止一个定时器
function timer_manager:stop_timer(timer_id)
	self.timerMap[timer_id] = nil
end 

-- testCase
function testCase()
	local timerManager = timer_manager.get_instance()

	local timerid1 = timerManager:new_timer(4,2,callback)
	local timerid2 = timerManager:new_timer(2,2,callback1)
	local timerid3 = timerManager:new_timer(1,4,callback2)
	local timerid4 = timerManager:new_timer(3,2,callback)

	for k,v in pairs(timerManager.timerMap) do
		print("当前数据有:",k,v.interval)
	end
	
	timerManager:update(10)
	timerManager:update(1)
	timerManager:update(1)
	timerManager:update(1)
	timerManager:update(1)
	timerManager:update(1.5)


	timerManager:stop_timer(timerid1)

	for k,v in pairs(timerManager.timerMap) do
		print("最后数据有",k,v.interval)
	end


end

testCase()

 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zero游戏开发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值