Posted to tcl by rmax at Tue Mar 28 22:35:28 GMT 2017view raw
- coroutine ratelimit apply {{} {
- set limits ""
- while 1 {
- set args [yieldto return -level 0]
- while 1 {
- lassign $args key ms body
- if {$ms eq ""} {
- dict unset limits $key
- break
- } else {
- set squelch [dict exists $limits $key]
- if {$squelch} {
- after cancel [dict get $limits $key]
- }
- dict set limits $key [after $ms [list [info coroutine] $key]]
- if {$squelch} break
- set args [yieldto eval $body]
- }
- }
- }
- }}