使用vwait等待后台进程时,变量已修改但vwait仍挂起
问题原因与解决办法
你的问题核心是变量作用域不匹配:testp过程里的set test 1修改的是过程内部的局部变量,而vwait test等待的是全局作用域的test变量,两者不是同一个,所以全局变量始终没被更新,导致vwait一直挂起。
修复方案(三种任选其一)
方案1:在testp中声明全局变量
修改testp过程,明确指定test是全局变量:
proc testp {efile} { global test set test 1 close $efile puts "test callback" ;# Tcl中没有echo命令,需替换为puts }
方案2:使用upvar关联全局变量
用upvar把全局的test映射到过程内部:
proc testp {efile} { upvar #0 test test set test 1 close $efile puts "test callback" }
方案3:直接修改全局命名空间变量
通过命名空间路径直接操作全局变量:
proc testp {efile} { set ::test 1 close $efile puts "test callback" }
内容的提问来源于stack exchange,提问作者kiran Biradar
相关产品推荐
相关产品推荐

