12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- package ticker
- import (
- "context"
- "time"
- )
- var _ Ticker = (*ticker)(nil)
- type Ticker interface {
- worker()
- Process(fun func())
- Stop()
- }
- type ticker struct {
- ticker *time.Ticker
- ctx context.Context
- cancel context.CancelFunc
- f func()
- }
- func New(d time.Duration) Ticker {
- ctx, cancelFunc := context.WithCancel(context.Background())
- return &ticker{
- ticker: time.NewTicker(d),
- ctx: ctx,
- cancel: cancelFunc,
- }
- }
- func (t *ticker) worker() {
- for {
- select {
- case <-t.ticker.C:
- t.f()
- case <-t.ctx.Done():
- return
- }
- }
- }
- func (t *ticker) Process(fun func()) {
- t.f = fun
- go t.worker()
- }
- func (t *ticker) Stop() {
- t.ticker.Stop()
- t.cancel()
- }
|