TCL - 如果脚本进入无限循环,则调用特定函数

时间:2015-11-10 19:40:20

标签: tcl

TCL中是否有任何机制可以检查TCL脚本是否进入无限循环?

例如, 我有Test.tcl我想检查我的a.tcl是否进入无限循环?如果我的a.tcl进入无限循环,是否可以调用某个函数“你的a.tcl进入无限循环。”

计时器的种类在c。

中起作用

希望我很清楚。

由于

1 个答案:

答案 0 :(得分:2)

查看允许类似内容的interp limit函数。

检测无限循环有点像halting problem所以,你只能设置一个你想等待的超时,但是在一般情况下确实没有真正检测到是否存在无限循环。

在某些特殊情况下,如果您尝试创建无限循环,Tcl会发出警告,尤其是在没有注册事件源时尝试启动事件循环(通过vwait forever)。

对于interp limit,请参阅以下文档: http://www.tcl.tk/man/tcl/TclCmd/interp.htm#M22

它有一个例子,用于在执行一定数量的命令后终止子解释器中的无限循环。

set i [interp create]
interp limit $i command -value 1000
interp eval $i {
    set x 0
    while {1} {
        puts "Counting up... [incr x]"
    }
}

您还可以限制执行所允许的时间。

set i [interp create]
# set a limit to now + 1 seconds
interp limit $i time -seconds [expr {[clock seconds] + 1}]
interp eval $i {
    set x 0
    while {1} {
        puts "Counting up... [incr x]"
    }
}