在TCL中,我们是否有任何机制可以继续轮询变量并在此之后执行某些操作。
我已阅读有关vwait
的内容,但它暂停了脚本。我希望脚本运行,如果变量值发生变化,则执行某些操作。
vwait的异步模式。
答案 0 :(得分:4)
您可以将跟踪附加到变量,以便您可以在更改变量时立即执行某些操作(或者,根据标记,读取或删除)。试试这个例子:
set abc 123
proc exampleCallback args {
global abc
puts "The variable abc is now $abc"
}
trace add variable abc write exampleCallback
incr abc
incr abc
incr abc
可以跟踪局部变量,但不推荐。此外,在内部,vwait
命令设置一个跟踪,该跟踪只是在写入变量时跳过标志;该标志表示等待事件循环返回时结束。只是使用Tcl的C API而不是脚本级API来设置跟踪...
答案 1 :(得分:0)
您还可以使用递归过程来保持以特定间隔轮询变量的当前值,并在满足变量的特定条件时退出递归。
例如:
set x 1
proc CheckVariableValue {
global x
if { $x >= 5 } {
puts "end"
return 1;
}
else{
incr x
puts $x
after 1000 CheckVariableValue
}
}
CheckVariableValue