fix: 修复 timer.Ticker.Loop 函数首次触发时会触发两次的问题
This commit is contained in:
parent
fdde6f9bc7
commit
2bd6aa50cb
|
@ -1,8 +1,8 @@
|
|||
package times
|
||||
package timer
|
||||
|
||||
import (
|
||||
"github.com/kercylan98/minotaur/utils/offset"
|
||||
"github.com/kercylan98/minotaur/utils/timer"
|
||||
"github.com/kercylan98/minotaur/utils/times"
|
||||
"time"
|
||||
)
|
||||
|
||||
|
@ -19,8 +19,8 @@ var (
|
|||
// RegSystemNewDayEvent 注册系统新的一天事件
|
||||
// - 建议全局注册一个事件后再另行拓展
|
||||
// - 将特定 name 的定时任务注册到 ticker 中,在系统时间到达每天的 00:00:00 时触发,如果 trigger 为 true,则立即触发一次
|
||||
func RegSystemNewDayEvent(ticker *timer.Ticker, name string, trigger bool, handle SystemNewDayEventHandle) {
|
||||
ticker.Loop(name, GetNextDayInterval(time.Now()), Day, timer.Forever, OnSystemNewDayEvent, name)
|
||||
func RegSystemNewDayEvent(ticker *Ticker, name string, trigger bool, handle SystemNewDayEventHandle) {
|
||||
ticker.Loop(name, times.GetNextDayInterval(time.Now()), times.Day, Forever, OnSystemNewDayEvent, name)
|
||||
systemNewDayEventHandles[name] = append(systemNewDayEventHandles[name], handle)
|
||||
if trigger {
|
||||
OnSystemNewDayEvent(name)
|
||||
|
@ -37,8 +37,8 @@ func OnSystemNewDayEvent(name string) {
|
|||
// RegOffsetTimeNewDayEvent 注册偏移时间新的一天事件
|
||||
// - 建议全局注册一个事件后再另行拓展
|
||||
// - 与 RegSystemNewDayEvent 类似,但是触发时间为 offset 时间到达每天的 00:00:00
|
||||
func RegOffsetTimeNewDayEvent(ticker *timer.Ticker, name string, offset *offset.Time, trigger bool, handle OffsetTimeNewDayEventHandle) {
|
||||
ticker.Loop(name, GetNextDayInterval(offset.Now()), Day, timer.Forever, OnOffsetTimeNewDayEvent, name)
|
||||
func RegOffsetTimeNewDayEvent(ticker *Ticker, name string, offset *offset.Time, trigger bool, handle OffsetTimeNewDayEventHandle) {
|
||||
ticker.Loop(name, times.GetNextDayInterval(offset.Now()), times.Day, Forever, OnOffsetTimeNewDayEvent, name)
|
||||
offsetTimeNewDayEventHandles[name] = append(offsetTimeNewDayEventHandles[name], handle)
|
||||
if trigger {
|
||||
OnOffsetTimeNewDayEvent(name)
|
|
@ -38,12 +38,14 @@ func (slf *Scheduler) Next(prev time.Time) time.Time {
|
|||
slf.lock.RLock()
|
||||
defer slf.lock.RUnlock()
|
||||
|
||||
if slf.kill || (slf.total > 0 && slf.trigger >= slf.total) {
|
||||
if slf.kill || (slf.total > 0 && slf.trigger > slf.total) {
|
||||
return time.Time{}
|
||||
}
|
||||
if slf.trigger == 0 {
|
||||
slf.trigger++
|
||||
return prev.Add(slf.after)
|
||||
}
|
||||
slf.trigger++
|
||||
return prev.Add(slf.interval)
|
||||
}
|
||||
|
||||
|
@ -56,8 +58,7 @@ func (slf *Scheduler) Caller() {
|
|||
return
|
||||
}
|
||||
|
||||
slf.trigger++
|
||||
if slf.total > 0 && slf.trigger >= slf.total {
|
||||
if slf.total > 0 && slf.trigger > slf.total {
|
||||
slf.lock.Unlock()
|
||||
slf.ticker.StopTimer(slf.name)
|
||||
} else {
|
||||
|
|
Loading…
Reference in New Issue