diff --git a/timewheel.go b/timewheel.go index 3aaebe4..b548269 100644 --- a/timewheel.go +++ b/timewheel.go @@ -13,7 +13,6 @@ type taskSlice struct { rawCycle int mode TimeMode task func() - tiny bool } type TimeWheel struct { @@ -77,7 +76,6 @@ func (t *TimeWheel) AddTask(id string, mode TimeMode, task func(), flower time.D mode: mode, rawCycle: cycle, pos: pos, - tiny: int(flower) < t.slotLen*int(t.interval), } } @@ -164,8 +162,8 @@ func (t *TimeWheel) addTask(task *taskSlice) { } var list *list.List - if task.tiny { - task.cycle = (task.pos - t.curtSlot + t.slotLen) % t.slotLen + if task.mode == TimeTypeLoop { + task.cycle = task.cycle*t.slotLen + (task.pos-t.curtSlot+t.slotLen)%t.slotLen task.rawCycle = task.cycle list = t.tinyWheel @@ -187,7 +185,7 @@ func (t *TimeWheel) removeTask(key string) { task := etask.Value.(*taskSlice) - if task.tiny { + if task.mode == TimeTypeLoop { _ = t.tinyWheel.Remove(etask) } else { _ = t.slots[task.pos].Remove(etask) diff --git a/timewheel_test.go b/timewheel_test.go index 2fe57d6..6aba960 100644 --- a/timewheel_test.go +++ b/timewheel_test.go @@ -11,7 +11,8 @@ func Test_timeWheel(t *testing.T) { <-time.After(10 * time.Millisecond) - t.Errorf("test2, %v", time.Now()) + t.Errorf("start time, %v", time.Now()) + timeWheel.AddTask("test1", TimeTypeLoop, func() { t.Errorf("test1, %v", time.Now()) }, time.Millisecond*300) @@ -22,5 +23,5 @@ func Test_timeWheel(t *testing.T) { t.Errorf("test2, %v", time.Now()) }, time.Second) - <-time.After(6 * time.Second) + <-time.After(8 * time.Second) }