Posted to tcl by evilotto at Thu Dec 12 17:49:21 GMT 2013view raw
- package require struct
- set q [struct::queue]
- proc every {ms body} {
- after $ms [list after idle [info level 0]]
- if 1 $body
- }
- set X 0
- set ct [clock millis]
- set dt 0
- every 100 {incr ::X}
- every 100 {set ::dt [expr {[clock millis] - $::ct}]; set ::ct [clock millis]}
- label .x -width 10 -textvariable X
- label .y -width 10 -textvariable dt
- pack .x .y
- proc queue {body} {
- $::q put $body
- # after 0 [list after idle $body]
- }
- every 10 {
- if {[$::q size] > 0} {
- eval [$::q get]
- }
- }
- set bcount 0
- proc busy {} {
- # puts [incr ::bcount]
- incr ::bcount
- after [expr {int(rand()*20)+50}]
- }
- every 200 {
- queue busy
- queue busy
- queue busy
- queue busy
- queue busy
- queue busy
- }
- after 5000 {puts "Busy $::bcount; Tick: $::X"; exit}