取消后不在tcl工作

时间:2013-09-05 06:05:36

标签: tcl

我已经编写了以下代码来取消后进行测试。这段代码应该只打印一次“现在更新”,但它打印10次,所以任何人都可以告诉我为什么取消后不工作

proc update_now {} {
    puts "Now updating"
}
proc print_now {} {
    after cancel [update_now]
    after idle [update_now]
}
for {set count 0} {$count < 5} {incr count} {
    print_now
}

1 个答案:

答案 0 :(得分:2)

你很困惑。首先,您在调用after idle结果上使用after cancelupdate_now(一个空字符串,它是一个无操作脚本)而不是在调用 update_now的脚本上。 Tcl对参考与使用非常严格。相反,你想要更像的东西:

proc print_now {} {
    after cancel update_now
    after idle update_now
    # You could use {update_now} or [list update_now] too; no real difference here
}

其次,您应该专注于仅通过令牌取消而不是根据您搜索的内容取消。要做到这一点,你实际上是这样做的:

proc print_now {} {
    global print_now_token
    after cancel $print_now_token
    set print_now_token [after idle update_now]
}
# Initialise the variable
set print_now_token {}