相关文章
在游戏开发中,很多场景会用到时间间隔触发的情况。例如:
1、超时处理
2、循环触发某些处理
3、延后处理等
下面的代码是一个完整的触发器应用代码,通过
New_tickTimerLink()创建一个任务管理器
Add函数用于添加一个延迟任务,包括(延迟时间,次数,任务接口实现)
关键点:
1、任务需要实现TimeJob接口
2、Remove函数需要自己补充实现,restart函数留做思考(例子中并没有真的实现restart)
3、任何以服务形式存在的组件(这里指tickTimerLink),在设计时需要保证服务不宕机。所以在触发处理时,使用go关键字执行。(go关键字后的函数体如出现panic不会导致服务报错)
4、对定时器的集中管理和链式处理(每次新增或执行,只需要关注链表头并处理)
5、细致观察会发现,采用的简单粗暴的队尾开始对比插入的办法,之所以这样做,是因为在游戏开发中,延迟需要一般会大量出现类似时间的情况。我们可以在服务器初始化过程中,New_tickTimerLink多次,并将他们分类到不同的需求中(或直接按照延迟时间进行分组)
package timer
import (
"sync"
"sync/atomic"