From 2bd6aa50cbbbc370b93b32c867fadaaf1a18bb02 Mon Sep 17 00:00:00 2001 From: kercylan98 Date: Tue, 15 Aug 2023 11:32:45 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=20timer.Ticker.Loop?= =?UTF-8?q?=20=E5=87=BD=E6=95=B0=E9=A6=96=E6=AC=A1=E8=A7=A6=E5=8F=91?= =?UTF-8?q?=E6=97=B6=E4=BC=9A=E8=A7=A6=E5=8F=91=E4=B8=A4=E6=AC=A1=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- utils/{times => timer}/newday.go | 12 ++++++------ utils/timer/scheduler.go | 7 ++++--- 2 files changed, 10 insertions(+), 9 deletions(-) rename utils/{times => timer}/newday.go (73%) diff --git a/utils/times/newday.go b/utils/timer/newday.go similarity index 73% rename from utils/times/newday.go rename to utils/timer/newday.go index 9be90614..4c13582d 100644 --- a/utils/times/newday.go +++ b/utils/timer/newday.go @@ -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) diff --git a/utils/timer/scheduler.go b/utils/timer/scheduler.go index 7b04032d..ffa6ee5c 100644 --- a/utils/timer/scheduler.go +++ b/utils/timer/scheduler.go @@ -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 {