go并发3 timerupdate 包 定时更新器包

本文介绍了一个名为timerUpdate的Go语言包,该包包含三个核心组件:tuclayer.go定义了定时更新器层,tu.go实现了定时更新器,而task.go则涉及任务管理。通过这些组件,可以实现高效且灵活的定时任务更新和管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

}


还有就是代码当中 出现的 工具方法 会在后面补充

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值