Posted to tcl by kyak at Thu Nov 08 18:16:02 GMT 2018view raw
- proc do_stuff {args} {
- if 1 $args
- # simulate blocking (e.g. in a http request)
- #after 2000
- # repeat this in 1 second:
- after 1000 [list do_stuff $args]
- }
- do_stuff puts "some stuff"
- do_stuff puts "some other stuff"
- after 10000 {set forever stop}
- vwait forever
Comments
Posted by avl at Mon Nov 12 12:32:44 GMT 2018 [text] [code]
inside the first call, args is, as if you had set it inside the proc as: set args {puts "some stuff"} ; that is what works with "if 1", which is almost equivalent to "eval". but then you create an after script that calls do_stuff with a single argument, rather than with separate arguments. line 6 should read: after 1000 [list do_stuff {*}$args] or alternatively: after 1000 [linsert $args 0 do_stuff] That said, it is not recommended to pass a script as separate words to a command. an even better aproach might be to turn "args" to a different name, and kick it off with do_stuff {puts "some stuff"}