tcl/tk 实例详解——after、update 和 vwait
after 主要用于要延迟一段时间再执行脚本,update 主要用于处理挂起的事件和回调,vwait 可以跟踪一个变量的修改
命令请参考:
afterhttp://blog.csdn.net/dulixin/archive/2008/03/05/2152029.aspx
updatehttp://blog.csdn.net/dulixin/archive/2008/04/01/2241828.aspx
vwaithttp://blog.csdn.net/dulixin/archive/2008/03/22/2207160.aspx
after 有几种形式,使用比较灵活。
最简单的形式,间隔一定时间后再运行脚本:
% after 5000
上面的命令就是间隔 5 秒钟后再继续运行脚本,这在等待其它设备处理时比较有效。
间隔一段时间后执行一条命令:TTT
% set a a
a
% after 5000 set a b
after#1
间隔 5 秒钟后执行命令 set a b,如果等待 5 秒钟后再查看$a 的值就变成 b 了。需要注意的是,在 tcl 中,时间循环并没有开启,而
tk 中事件循环总是活动的,所以在 tcl 脚本中使用时需要非常小心,可能你需要的值在 5 秒钟后并没有改变,这里就需要使用到两个
命令 update 和 vwait,update 命令可以时解释器去处理挂起的事件,vwait 可以等待一个变量到修改为止,下面举例说明:
如果在 5 秒钟之后使用查看变量 a 里面的值:
% puts $a
a
还是 a,并没有修改为 b,那么这个时候使用 update:
% update
% puts $a
b
上面的方法可能在实际使用时并没有意义,也许脚本的编写者是想在 tcl 中精确的控制脚本的执行时间,那也没有问题,可以使用
vwait 来操作,在时间间隔的期限内使用 vwait 可以使命令在精确的时间间隔时执行:
% set a a
a
% after 5000 set a b
after#1
% vwait a
%
会等待到第 5 秒钟执行赋值命令。
如果注册了一条命令在某个时间执行,也可以取消这个命令的执行,使用 after cancel 命令,这个命令有两种形式,既可以输入要
取消命令的 ID,也可以使用该命令本身来取消。
如想要取消 ID 为 after#1 的命令:
% after cancel after#1
评论0