timer

package
v0.5.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 14, 2024 License: MIT Imports: 8 Imported by: 0

README

Timer

Go doc

暂无介绍...

目录导航

列出了该 package 下所有的函数及类型定义,可通过目录导航进行快捷跳转 ❤️

展开 / 折叠目录导航

包级函数定义

函数名称 描述
RegSystemNewDayEvent 注册系统新的一天事件
OnSystemNewDayEvent 系统新的一天事件
RegOffsetTimeNewDayEvent 注册偏移时间新的一天事件
OnOffsetTimeNewDayEvent 偏移时间新的一天事件
WithCaller 通过其他的 handle 执行 Caller
WithMark 通过特定的标记创建定时器
NewPool 创建一个定时器池,当 tickerPoolSize 小于等于 0 时,将会引发 panic,可指定为 DefaultTickerPoolSize
SetPoolSize 设置标准池定时器池大小
GetTicker 获取标准池中的一个定时器

类型定义

类型 名称 描述
STRUCT SystemNewDayEventHandle 暂无描述...
STRUCT Option 暂无描述...
STRUCT Pool 定时器池
STRUCT Scheduler 调度器
STRUCT Ticker 定时器

详情信息

func RegSystemNewDayEvent(ticker *Ticker, name string, trigger bool, handle SystemNewDayEventHandle)

注册系统新的一天事件

  • 建议全局注册一个事件后再另行拓展
  • 将特定 name 的定时任务注册到 ticker 中,在系统时间到达每天的 00:00:00 时触发,如果 trigger 为 true,则立即触发一次

func OnSystemNewDayEvent(name string)

系统新的一天事件


func RegOffsetTimeNewDayEvent(ticker *Ticker, name string, offset *offset.Time, trigger bool, handle OffsetTimeNewDayEventHandle)

注册偏移时间新的一天事件

  • 建议全局注册一个事件后再另行拓展
  • 与 RegSystemNewDayEvent 类似,但是触发时间为 offset 时间到达每天的 00:00:00

func OnOffsetTimeNewDayEvent(name string)

偏移时间新的一天事件


func WithCaller(handle func (name string, caller func ())) Option

通过其他的 handle 执行 Caller


func WithMark(mark string) Option

通过特定的标记创建定时器


func NewPool(tickerPoolSize int) *Pool

创建一个定时器池,当 tickerPoolSize 小于等于 0 时,将会引发 panic,可指定为 DefaultTickerPoolSize


func SetPoolSize(size int)

设置标准池定时器池大小

  • 默认值为 DefaultTickerPoolSize,当定时器池中的定时器不足时,会自动创建新的定时器,当定时器释放时,会将多余的定时器进行释放,否则将放入定时器池中

func GetTicker(size int, options ...Option) *Ticker

获取标准池中的一个定时器


SystemNewDayEventHandle STRUCT
type SystemNewDayEventHandle func()
Option STRUCT
type Option func(ticker *Ticker)
Pool STRUCT

定时器池

type Pool struct {
	tickers        []*Ticker
	lock           sync.Mutex
	tickerPoolSize int
	closed         bool
}
func (*Pool) ChangePoolSize(size int) error

改变定时器池大小

  • 当传入的大小小于或等于 0 时,将会返回错误,并且不会发生任何改变

func (*Pool) GetTicker(size int, options ...Option) *Ticker

获取一个新的定时器


func (*Pool) Release()

释放定时器池的资源,释放后由其产生的 Ticker 在 Ticker.Release 后将不再回到池中,而是直接释放

  • 虽然定时器池已被释放,但是依旧可以产出 Ticker

Scheduler STRUCT

调度器

type Scheduler struct {
	name     string
	after    time.Duration
	interval time.Duration
	total    int
	trigger  int
	kill     bool
	cbFunc   reflect.Value
	cbArgs   []reflect.Value
	timer    *timingwheel.Timer
	ticker   *Ticker
	lock     sync.RWMutex
	expr     *cronexpr.Expression
}
func (*Scheduler) Name() string

获取调度器名称


func (*Scheduler) Next(prev time.Time) time.Time

获取下一次执行的时间


func (*Scheduler) Caller()

可由外部发起调用的执行函数


Ticker STRUCT

定时器

type Ticker struct {
	timer  *Pool
	wheel  *timingwheel.TimingWheel
	timers map[string]*Scheduler
	lock   sync.RWMutex
	handle func(name string, caller func())
	mark   string
}
func (*Ticker) Mark() string

获取定时器的标记

  • 通常用于鉴别定时器来源

func (*Ticker) Release()

释放定时器,并将定时器重新放回 Pool 池中


func (*Ticker) StopTimer(name string)

停止特定名称的调度器


func (*Ticker) IsStopped(name string) bool

特定名称的调度器是否已停止


func (*Ticker) GetSchedulers() []string

获取所有调度器名称


func (*Ticker) Cron(name string, expression string, handleFunc interface {}, args ...interface {})

通过 cron 表达式设置一个调度器,当 cron 表达式错误时,将会引发 panic

查看 / 收起单元测试

func TestTicker_Cron(t *testing.T) {
	ticker := timer.GetTicker(10)
	ticker.After("1_sec", time.Second, func() {
		t.Log(time.Now().Format(time.DateTime), "1_sec")
	})
	ticker.Loop("1_sec_loop_3", 0, time.Second, 3, func() {
		t.Log(time.Now().Format(time.DateTime), "1_sec_loop_3")
	})
	ticker.Cron("5_sec_cron", "0/5 * * * * * ?", func() {
		t.Log(time.Now().Format(time.DateTime), "5_sec_cron")
	})
	time.Sleep(times.Week)
}


func (*Ticker) CronByInstantly(name string, expression string, handleFunc interface {}, args ...interface {})

与 Cron 相同,但是会立即执行一次


func (*Ticker) After(name string, after time.Duration, handleFunc interface {}, args ...interface {})

设置一个在特定时间后运行一次的调度器


func (*Ticker) Loop(name string, after time.Duration, interval time.Duration, times int, handleFunc interface {}, args ...interface {})

设置一个在特定时间后反复运行的调度器


Documentation

Index

Constants

View Source
const (
	Forever   = -1 //  无限循环
	Once      = 1  // 一次
	Instantly = 0  // 立刻
)
View Source
const (
	DefaultTickerPoolSize = 96
)
View Source
const (
	NoMark = "" // 没有设置标记的定时器
)

Variables

This section is empty.

Functions

func OnOffsetTimeNewDayEvent added in v0.0.28

func OnOffsetTimeNewDayEvent(name string)

OnOffsetTimeNewDayEvent 偏移时间新的一天事件

func OnSystemNewDayEvent added in v0.0.28

func OnSystemNewDayEvent(name string)

OnSystemNewDayEvent 系统新的一天事件

func RegOffsetTimeNewDayEvent added in v0.0.28

func RegOffsetTimeNewDayEvent(ticker *Ticker, name string, offset *offset.Time, trigger bool, handle OffsetTimeNewDayEventHandle)

RegOffsetTimeNewDayEvent 注册偏移时间新的一天事件

  • 建议全局注册一个事件后再另行拓展
  • 与 RegSystemNewDayEvent 类似,但是触发时间为 offset 时间到达每天的 00:00:00

func RegSystemNewDayEvent added in v0.0.28

func RegSystemNewDayEvent(ticker *Ticker, name string, trigger bool, handle SystemNewDayEventHandle)

RegSystemNewDayEvent 注册系统新的一天事件

  • 建议全局注册一个事件后再另行拓展
  • 将特定 name 的定时任务注册到 ticker 中,在系统时间到达每天的 00:00:00 时触发,如果 trigger 为 true,则立即触发一次

func SetPoolSize added in v0.3.6

func SetPoolSize(size int)

SetPoolSize 设置标准池定时器池大小

  • 默认值为 DefaultTickerPoolSize,当定时器池中的定时器不足时,会自动创建新的定时器,当定时器释放时,会将多余的定时器进行释放,否则将放入定时器池中

Types

type OffsetTimeNewDayEventHandle added in v0.0.28

type OffsetTimeNewDayEventHandle func()

type Option

type Option func(ticker *Ticker)

func WithCaller

func WithCaller(handle func(name string, caller func())) Option

WithCaller 通过其他的 handle 执行 Caller

func WithMark added in v0.0.3

func WithMark(mark string) Option

WithMark 通过特定的标记创建定时器

type Pool added in v0.3.6

type Pool struct {
	// contains filtered or unexported fields
}

Pool 定时器池

func NewPool added in v0.3.6

func NewPool(tickerPoolSize int) *Pool

NewPool 创建一个定时器池,当 tickerPoolSize 小于等于 0 时,将会引发 panic,可指定为 DefaultTickerPoolSize

func (*Pool) ChangePoolSize added in v0.3.6

func (slf *Pool) ChangePoolSize(size int) error

ChangePoolSize 改变定时器池大小

  • 当传入的大小小于或等于 0 时,将会返回错误,并且不会发生任何改变

func (*Pool) GetTicker added in v0.3.6

func (slf *Pool) GetTicker(size int, options ...Option) *Ticker

GetTicker 获取一个新的定时器

func (*Pool) Release added in v0.3.6

func (slf *Pool) Release()

Release 释放定时器池的资源,释放后由其产生的 Ticker 在 Ticker.Release 后将不再回到池中,而是直接释放

  • 虽然定时器池已被释放,但是依旧可以产出 Ticker

type Scheduler

type Scheduler struct {
	// contains filtered or unexported fields
}

Scheduler 调度器

func (*Scheduler) Caller

func (slf *Scheduler) Caller()

Caller 可由外部发起调用的执行函数

func (*Scheduler) Name

func (slf *Scheduler) Name() string

Name 获取调度器名称

func (*Scheduler) Next

func (slf *Scheduler) Next(prev time.Time) time.Time

Next 获取下一次执行的时间

type SystemNewDayEventHandle added in v0.0.28

type SystemNewDayEventHandle func()

type Ticker

type Ticker struct {
	// contains filtered or unexported fields
}

Ticker 定时器

func GetTicker

func GetTicker(size int, options ...Option) *Ticker

GetTicker 获取标准池中的一个定时器

func (*Ticker) After

func (slf *Ticker) After(name string, after time.Duration, handleFunc interface{}, args ...interface{})

After 设置一个在特定时间后运行一次的调度器

func (*Ticker) Cron added in v0.3.3

func (slf *Ticker) Cron(name, expression string, handleFunc interface{}, args ...interface{})

Cron 通过 cron 表达式设置一个调度器,当 cron 表达式错误时,将会引发 panic

func (*Ticker) CronByInstantly added in v0.3.6

func (slf *Ticker) CronByInstantly(name, expression string, handleFunc interface{}, args ...interface{})

CronByInstantly 与 Cron 相同,但是会立即执行一次

func (*Ticker) GetSchedulers

func (slf *Ticker) GetSchedulers() []string

GetSchedulers 获取所有调度器名称

func (*Ticker) IsStopped

func (slf *Ticker) IsStopped(name string) bool

IsStopped 特定名称的调度器是否已停止

func (*Ticker) Loop

func (slf *Ticker) Loop(name string, after, interval time.Duration, times int, handleFunc interface{}, args ...interface{})

Loop 设置一个在特定时间后反复运行的调度器

func (*Ticker) Mark added in v0.0.3

func (slf *Ticker) Mark() string

Mark 获取定时器的标记

  • 通常用于鉴别定时器来源

func (*Ticker) Release

func (slf *Ticker) Release()

Release 释放定时器,并将定时器重新放回 Pool 池中

func (*Ticker) StopTimer

func (slf *Ticker) StopTimer(name string)

StopTimer 停止特定名称的调度器

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL