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()

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章