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

TCL - Calling Specific Function if Scripts goes in infinite loop

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

例如, 我有 Test.tcl,我想从中检查我的 a.tcl 是否进入无限循环?如果我的 a.tcl 进入无限循环,是否可以调用 "your a.tcl goes infinite loop."

的某个函数

c 中定时器的种类

希望我清楚。

谢谢

查看允许类似操作的 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]"
    }
}