Для каждого использования 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...
}