timerUpdate包 有三个文件
tuclayer.go 定时更新器层
tu.go 定时更新器
task.go 任务
tuclayer.go 定时更新器层
package timerupdate
import (
"time"
)
//Timing updater component layer
//定时更新器组件层接口
type TUCLayer struct {
//定时器集合
TUs []*TimerUpdate
}
//创建定时器
func CreateExcuTu(timerName string, wt int, cyt time.Duration, arg_f func(args ...interface{}) interface{}) *TimerUpdate {
//创建定时器
tu := &TimerUpdate{
TimerName: timerName,
TimerWorkType: wt,
STask: make(chan *Task),
CycleTime: cyt,
IsSuspend: true,
IsStop: true,
Arg_f: arg_f,
}
return tu
}
//查询定时更新器
func (tucl *TUCLayer) FindTu(timeName string) *TimerUpdate {
for _, v := range tucl.TUs {
if v.TimerName == timeName {
return v
}
}
return nil
}
//暂停更新器
func (tucl *TUCLayer) SuspendTu(timeName string) bool {
tucl.FindTu(timeName)
return true
}
tu.go 定时更新器
package timerupdate
import (
"fmt"
"github.com/typa01/go-utils"
"time"
)
//定时更新器
type TimerUpdate struct {
TimerName string //定时器名字
TimerWorkType int //定时器工作类型
STask chan *Task //发送任务通道
CycleTime time.Duration //定时器周期
IsSuspend bool //是否暂停 true 不暂停,false 暂停
IsStop bool //是否停止 true 不停止,false 停止
Tt *time.Ticker //存放每一个定时更新器里面的time.Ticker
Arg_f func(args ...interface{}) interface{} //具体任务
//更新功能
}
//创建一个Task
func (tu *TimerUpdate) CreateTask(arg_f func(args ...interface{}) interface{}) *Task {
t := Task{
Func: arg_f,
Level: 1,
Guid: tsgutils.GUID(),
}
return &t
}
//发送任务
func (tu *TimerUpdate) SendTask() {
t := tu.CreateTask(tu.Arg_f)
fmt.Println(tu.TimerName, t.Guid, "发送任务成功")
//把任务发送给对应的更新器通道
tu.STask <- t
}
//开启定时器
func (tu *TimerUpdate) StarTicker() {
//开启一个定时器
ticker := time.NewTicker(tu.CycleTime)
tu.Tt=ticker
for {
for range ticker.C {
fmt.Printf("------开启%s定时器--------\n", tu.TimerName)
//挖掘并创建任务
tu.SendTask()
}
}
}
task.go 任务
package timerupdate
import (
"fmt"
"github.com/typa01/go-utils"
)
//任务结构
type Task struct {
Guid string //唯一标识符
ExcuStartTime string //执行时间
ExcuendTime string //执行结束时间
Level int //任务等级
Func func(args ...interface{}) (result interface{}) //具体任务函数
}
//执行任务
func (t *Task) ExcuTask() interface{}{
t.ExcuStartTime = tsgutils.IsoTimeNow()
result:= t.Func()
t.ExcuendTime = tsgutils.IsoTimeNow()
fmt.Println("我的任务标志:", t.Guid)
fmt.Printf("开始时间执行时间:%s,结束时间: %s \n\n", t.ExcuStartTime,t.ExcuendTime)
return result
}
还有就是代码当中 出现的 工具方法 会在后面补充