TCL问题:vwait 怎么用? @ 主贴
日期:2009-06-20 16:24:36 作者:
提问
还是不愿看manual,大佬给解释一下吧 :)
vwait可以被看作是一个特殊的事件侦听器(Event Listener)。该事件侦听器阻塞当前进程,直到事件(指定的变量被修改)发生为止。
事件在程序中可以说是无处不在,尤其是需要交互的程序。很多程序都可以理解为下面的模式:
while(等待一个事件发生){ 处理这个事件; 等待下一个事件; }
这可以看作是采用循环查询的方式。使用 vwait 可以把它改成事件驱动的(Event Driven)。考虑这样一个例子
set fp [open "| cat"] while {[eof $fp]!=1} { gets $fp line puts "== $line" after 500 ; # wait 500 ms } puts "INFO: Exit Tcl!" close $fp
proc test_stdin {} { global fp global state gets $fp line puts "== $line" if [eof $fp] { puts "INFO: Process Exit! set state to notify Tcl!" set state "exit" } else { puts "INFO: keep wait 500 ms ..." after 500 test_stdin } } set fp [open "| cat"] puts "INFO: type 'Ctrl-D' to exit!" test_stdin vwait state puts "INFO: Exit Tcl!" close $fp