1 Star 0 Fork 0

zjh-tech / go-etimer

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
timer.go 1.27 KB
一键复制 编辑 原始数据 按行查看 历史
zjh-tech 提交于 2023-08-02 13:40 . init
package etimer
import (
"reflect"
"runtime/debug"
)
type Timer struct {
uid uint64
eid uint32
delay uint64
repeat bool
rotation int64
slot uint64
cb FuncType
args ArgType
state TimerState
register *TimerRegister
}
func newTimer(eid uint32, uid uint64, delay uint64, repeat bool, cb FuncType, args ArgType, register *TimerRegister) *Timer {
timer := &Timer{
eid: eid,
uid: uid,
delay: delay,
repeat: repeat,
cb: cb,
args: args,
state: TimerInvalidState,
register: register,
}
return timer
}
func (t *Timer) Kill() {
t.state = TimerKilledState
ELog.Debugf("[Timer] id %v-%v Kill State", t.uid, t.eid)
}
func (t *Timer) Call() {
defer func() {
if err := recover(); err != nil {
ELog.Errorf("[Timer] Func%v Args:%v Call Err: %v Stack=%v", reflect.TypeOf(t.cb).Name(), t.args, err, string(debug.Stack()))
}
}()
t.cb(t.args...)
}
func (t *Timer) getRemainTime() uint64 {
remainTime := uint64(0)
if t.state != TimerRunningState {
return remainTime
}
curSlot := GTimerMgr.GetCurSlot()
if curSlot < t.slot {
remainTime = uint64(t.rotation)*MaxSlotSize + t.slot - curSlot
} else {
remainTime = uint64(t.rotation)*MaxSlotSize + (MaxSlotSize - curSlot + t.slot)
}
return remainTime
}
Go
1
https://gitee.com/zjh-tech/go-etimer.git
git@gitee.com:zjh-tech/go-etimer.git
zjh-tech
go-etimer
go-etimer
master

搜索帮助

53164aa7 5694891 3bd8fe86 5694891