【问题标题】:How to evaluate TCL callbacks one by one?如何一一评估 TCL 回调?
【发布时间】:2012-02-03 12:40:58
【问题描述】:

假设为stdin注册了一些回调。

fileevent stdin readable thatCallback

这意味着在执行update 命令期间,当stdin 有可用输入时,它将一次又一次地评估thatCallback

如何让thatCallback 在每次调用update 期间只被评估一次?

【问题讨论】:

  • 你可能做错了。 update 命令几乎没有好的用例。您可以通过简单地删除回调中的 fileevent 处理程序并在您调用 update 后立即重置它来做您想做的事情,但它闻起来像是要解决的错误问题。

标签: events callback tcl stdin


【解决方案1】:

对于update 的每次使用,任何特定的事件处理程序都只会执行一次。那是因为update 所做的是检查哪些事件处理程序是可运行的(以及哪些事件实际排队),然后执行所有准备好的事件,一次。它不会等待进一步的事件发生。

现在,fileevent 仍将被注册,以便下次进入事件循环时它可能会再次运行。如果您想要一个只使用一次的fileevent,请在它运行时取消注册处理程序。例如:

fileevent stdin readable thatCallback
proc thatCallback {} {
    # First, de-register ourselves so we're a one-shot
    fileevent stdin readable {}
    # Now do the rest of it here...
}

【讨论】:

  • 但是在这种情况下update 的下一个调用不会调用tahtCallback,对吧?
  • @Vahagn:是的,因为不会有任何注册被调用的东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多