XScheduleManager = XScheduleManager or {}
local CSXScheduleManager = CS.XScheduleManager
XScheduleManager.SECOND = CSXScheduleManager.SECOND
require("XCommon/XTool")
local XTool = XTool
local IsEditor = XMain.IsEditorDebug
-- ///
-- /// 启动定时器
-- ///
-- /// 处理函数
-- /// 间隔毫秒(第一次执行在间隔时间后)
-- /// 循环次数
-- /// 延迟毫秒
-- /// 定时器id
function XScheduleManager.Schedule(func, interval, loop, delay)
local name = IsEditor and XTool.GetStackTraceName() or nil
return CSXScheduleManager.Schedule(func, interval, loop, delay or 0, name)
end
-- ///
-- /// 启动单次定时器
-- ///
-- /// 处理函数
-- /// 延迟毫秒
-- /// 定时器id
function XScheduleManager.ScheduleOnce(func, delay)
local name = IsEditor and XTool.GetStackTraceName() or nil
return CSXScheduleManager.ScheduleOnce(func, delay, name)
end
function XScheduleManager.ScheduleNextFrame(func)
CSXScheduleManager.ScheduleNextFrame(func)
end
-- ///
-- /// 启动指定时间单次定时器
-- ///
-- /// 处理函数
-- /// 需要启动的时间
-- /// 定时器id
function XScheduleManager.ScheduleAtTimestamp(func, timeStamp)
local name = IsEditor and XTool.GetStackTraceName() or nil
local nowTime = XTime.GetServerNowTimestamp()
if timeStamp <= nowTime then
return
end
return CSXScheduleManager.ScheduleOnce(func, (timeStamp - nowTime) * XScheduleManager.SECOND, name)
end
-- ///
-- /// 启动永久定时器
-- ///
-- /// 处理函数
-- /// 间隔毫秒
-- /// 延迟毫秒
-- /// 定时器id
function XScheduleManager.ScheduleForever(func, interval, delay)
local name = IsEditor and XTool.GetStackTraceName() or nil
return CSXScheduleManager.ScheduleForever(func, interval, delay or 0, name)
end
-- ///
-- /// 启动永久定时器
-- ///
-- /// 处理函数
-- /// 间隔毫秒
-- /// 延迟毫秒
-- /// 定时器id
-- /// PS:去除了XScheduleManager.ScheduleForever里计算时间自动叠加多一次的Interval
function XScheduleManager.ScheduleForeverEx(func, interval, delay)
local name = IsEditor and XTool.GetStackTraceName() or nil
return CSXScheduleManager.ScheduleForever(func, interval, (delay or 0) - interval, name)
end
-- ///
-- /// 取消定时器
-- ///
-- /// 定时器id
function XScheduleManager.UnSchedule(id)
return CSXScheduleManager.UnSchedule(id)
end
-- 释放所有定时器
function XScheduleManager.UnScheduleAll()
XTool.ResetInitSchedule()
return CSXScheduleManager.UnScheduleAll()
end