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]"
}
}
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]"
}
}