Skip to content

Instantly share code, notes, and snippets.

@kovacshuni
Created February 18, 2016 14:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kovacshuni/7293cae776c982360f16 to your computer and use it in GitHub Desktop.
Save kovacshuni/7293cae776c982360f16 to your computer and use it in GitHub Desktop.
event-limiter
type EventLimiter struct {
ticker time.Ticker
trigger chan bool
timePassed chan bool
}
func NewLimiter() *EventLimiter {
ticker := time.NewTicker(60 * time.Second)
trigger := make(chan bool, 1)
timePassed := make(chan bool, 1)
return EventLimiter{ticker, trigger, timePassed}
}
func (l EventLimiter) maintainLimiter() {
//goroutine for both fors
for {
<- l.ticker.C
select {
case l.timePassed <- true:
default:
}
}
}
func (l EventLimiter) limit(f func()) {
<- l.timePassed
<- l.trigger
f()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment