如何打破tcl中的每一个循环

如何打破tcl中的每一个循环,tcl,tk,Tcl,Tk,当主作业正在运行时,需要在一定的持续时间内运行一段代码。 基本上,一些工具正在编写日志文件,在编写日志文件的过程中,我使用grep查找该日志文件中的错误/警告 我使用每个循环检查作业正在运行的条件,然后编写一个错误/警告数据库,如果作业没有运行,它将打印消息。 问题:一旦它发现作业正在运行,每个循环都会被踢到它身上,即使else条件为false,它也不会停止 我使用了中断if循环,但不起作用。 如何停止每个循环,请建议 proc every {ms body} { eval $body

当主作业正在运行时,需要在一定的持续时间内运行一段代码。 基本上,一些工具正在编写日志文件,在编写日志文件的过程中,我使用grep查找该日志文件中的错误/警告

我使用每个循环检查作业正在运行的条件,然后编写一个错误/警告数据库,如果作业没有运行,它将打印消息。 问题:一旦它发现作业正在运行,每个循环都会被踢到它身上,即使else条件为false,它也不会停止

我使用了中断if循环,但不起作用。 如何停止每个循环,请建议

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}

我意识到我的看涨代码

 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
      }
    }
我不需要每一个内-外循环,删除每一个内-外循环可以解决我的问题。 如果有任何优化方法,请提出建议。。。
我仍然需要知道如何打破每一个循环。

我意识到我的看涨代码

 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
      }
    }
我不需要每一个内-外循环,删除每一个内-外循环可以解决我的问题。 如果有任何优化方法,请提出建议。。。
我仍然需要知道如何打破each循环。

一个简单的方法是在调用后保存
的id,并使用它来取消:

proc every {ms body} {
    global id
    eval $body
    set id [after $ms [info level 0]]
}

every 2000 {puts foo}

after cancel $id
文件: , , , , , ,

一种简单的方法是在调用后保存
的id,并使用它来取消:

proc every {ms body} {
    global id
    eval $body
    set id [after $ms [info level 0]]
}

every 2000 {puts foo}

after cancel $id
文件: , , , , , ,