gpt-sovits / pkg /cron /cron.go
hanfish's picture
111
215df2f verified
raw
history blame contribute delete
476 Bytes
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() {
select {
case _, _ = <-c.ch:
default:
c.ch <- struct{}{}
close(c.ch)
}
}