LINUX.ORG.RU

[Tcl/Tk][Serial][Нипонял] Еще вопрос по fileevent


0

1

Добрый день, коллеги.

Имеется такая проблема. Работаю с последовательным портом из Tcl/Tk. Старый способ с постоянным поллингом порта не нравится, осваиваю файлэвенты. Быдлокод Пример работы здесь:

http://pastebin.com/aH6XZR8m

Все нормально работает, но возникают нештатные ситуации. Например, если модем только что включен, на первые несколько команд он отвечает ерундой или не отвечает совсем. Первый вариант обрабатывается, а вот со вторым проблема — ведь в таком случае порт не становится readable. Как мне идеологически правильно разрешить эту ситуацию? На VB под виндами заводили таймер, который включался сразу после подачи команды в порт, и если через определенное время ответа не было — таймер срабатывал, и в нем уже обрабатывалась ошибка. Как сделать аналогично в Tcl/Tk, и стоит ли вообще так делать — я не нашел. Посоветуйте, пожалуйста, как мне правильно поступить.

На VB под виндами заводили таймер, который включался сразу после подачи команды в порт, и если через определенное время ответа не было — таймер срабатывал, и в нем уже обрабатывалась ошибка.

after [expr $waitsec * 1000] {myfunction}

sdio ★★★★★ ()
Ответ на: комментарий от sdio
after [expr $waitsec * 1000] {myfunction}

Спасибо, я об этом знаю. Но ведь after сработает, даже если все пошло правильно, а я этого не хочу.

decadent ()
Ответ на: комментарий от sdio

Если все хорошо, то отменяешь «взведенный» after

after cancel {myfunction}

Хм, похоже, работает. Большое спасибо за советы, проблема решена.

decadent ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.