当TCL中的变量发生变化时执行某些操作

时间:2016-07-21 13:37:54

标签: tcl

在TCL中,我们是否有任何机制可以继续轮询变量并在此之后执行某些操作。

我已阅读有关vwait的内容,但它暂停了脚本。我希望脚本运行,如果变量值发生变化,则执行某些操作。

vwait的异步模式。

2 个答案:

答案 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