2022-08-31 12:46:19 +00:00
|
|
|
package cron
|
|
|
|
|
|
|
|
import "time"
|
|
|
|
|
|
|
|
type Cron struct {
|
|
|
|
d time.Duration
|
|
|
|
ch chan struct{}
|
|
|
|
}
|
|
|
|
|
|
|
|
func NewCron(d time.Duration) *Cron {
|
|
|
|
return &Cron{
|
|
|
|
d: d,
|
|
|
|
ch: make(chan struct{}),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Cron) Do(f func()) {
|
|
|
|
go func() {
|
|
|
|
ticker := time.NewTicker(c.d)
|
|
|
|
defer ticker.Stop()
|
|
|
|
for {
|
|
|
|
select {
|
|
|
|
case <-ticker.C:
|
|
|
|
f()
|
|
|
|
case <-c.ch:
|
|
|
|
return
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}()
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Cron) Stop() {
|
2022-09-14 07:13:02 +00:00
|
|
|
select {
|
|
|
|
case _, _ = <-c.ch:
|
|
|
|
default:
|
|
|
|
c.ch <- struct{}{}
|
|
|
|
close(c.ch)
|
|
|
|
}
|
2022-08-31 12:46:19 +00:00
|
|
|
}
|