local skynet = require "skynet" local oo = require "Class" local log = require "Log" local dataType = require "DataType" local errorInfo = require "ErrorInfo" local Timer = oo.class() Timer.list = {} Timer.Status_Start = 1 --运行 Timer.Status_Stop = 2 --停止 --新增Timer function Timer:Add( type , interval , callFunc , parent ) if not self.list[ type ] then self.list[ type ] = {} end self.list[ type ].status = self.Status_Start --状态 self.list[ type ].callFunc = callFunc --回调函数 self.list[ type ].parent = parent --回调参数 self.list[ type ].interval = interval --间隔时间 self.list[ type ].nextFreshTime = skynet.GetTime() + interval --下一次刷新时间 callFunc( parent ) end --刷新Timer function Timer:Refresh() local isSuc ,err = nil,nil for k, v in pairs( self.list ) do if self.Status_Start == v.status and skynet.GetTime() >= v.nextFreshTime then function Do () local t1 = skynet.GetTime() v.callFunc( v.parent ) local t2 = skynet.GetTime() - t1 if t2 > 3 then skynet.server.clusterServer:SendErrorInfoToCenter( nil , errorInfo.ErrorCode.CalcTimeTooLong , string.format("Timer类型%d 计算时间过长", k)) log.info("Timer类型%d 运行时间",k, t2 ) end end isSuc,err = pcall(Do) if not isSuc then log.info("Timer:Refresh 有报错" , err ) end v.nextFreshTime = skynet.GetTime() + v.interval --下一次刷新时间 end end end skynet.server.timer = Timer return Timer