From 7d6a9ae66391ce805cfbf1b4d6c8580ea7f50e9c Mon Sep 17 00:00:00 2001 From: Martin Boehm Date: Tue, 3 Apr 2018 22:09:46 +0200 Subject: [PATCH] Force execution in tickAndDebounce after debounceTime --- blockbook.go | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/blockbook.go b/blockbook.go index a0266a29..5286b366 100644 --- a/blockbook.go +++ b/blockbook.go @@ -255,6 +255,7 @@ func main() { func tickAndDebounce(tickTime time.Duration, debounceTime time.Duration, input chan struct{}, f func()) { timer := time.NewTimer(tickTime) + var firstDebounce time.Time Loop: for { select { @@ -266,12 +267,21 @@ Loop: if !ok { break Loop } - // debounce for debounceTime - timer.Reset(debounceTime) + if firstDebounce.IsZero() { + firstDebounce = time.Now() + } + // debounce for up to debounceTime period + // afterwards execute immediately + if firstDebounce.Add(debounceTime).After(time.Now()) { + timer.Reset(debounceTime) + } else { + timer.Reset(0) + } case <-timer.C: // do the action and start the loop again f() timer.Reset(tickTime) + firstDebounce = time.Time{} } } }