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