当主作业运行时,需要在一段时间内运行一段代码。 基本上一些工具正在编写一个logFile,在logfile编写过程中我用grep来表示来自该logFile的错误/警告。
我使用每个循环来检查正在运行的作业的条件,然后编写一个错误/警告数据库,如果作业没有运行,它将打印消息。 问题:一旦发现作业正在运行,每个循环都会被激活,即使其他条件都是假的,它也永远不会停止。
我在if循环中使用了break,但是没有用。 如何停止每个循环,请建议。
proc every {ms body} {
eval $body
after $ms [info level 0]
}
proc run_this_loop {} {
catch {set job_name [exec qstat | awk {{print $3}} | grep liberate]} error
if {[string match *abnormally* $error]} {
puts "No background liberate job is found\n"
} else {
every 10000 {grepLoop}
}
}
every 1000 {run_this_loop}
答案 0 :(得分:2)
一种简单的方法是保存after
调用的id并使用它来取消:
proc every {ms body} {
global id
eval $body
set id [after $ms [info level 0]]
}
every 2000 {puts foo}
after cancel $id
答案 1 :(得分:0)
我意识到了我的看涨代码。
proc run_this_loop {} {
catch {set job_name [exec qstat | awk {{print $3}} | grep liberate]} error
if {[string match *abnormally* $error]} {
puts "No background liberate job is found\n"
} else {
grepLoop
}
}
我不需要每个内部循环,删除每个解决我的问题。 如果有任何优化的方式,请建议... 我仍然需要知道如何打破每一个循环。