Как оценить обратные вызовы TCL один за другим? - PullRequest
0 голосов
/ 05 января 2012

Предположим, что некоторый обратный вызов зарегистрирован для stdin.

fileevent stdin readable thatCallback

Это означает, что во время выполнения команды update он будет оценивать thatCallback время от времени, пока есть доступный ввод в stdin.

Как сделать так, чтобы thatCallback оценивался только один раз при каждом вызове update?

1 Ответ

2 голосов
/ 06 января 2012

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