2015-11-17 2 views
1

У меня есть скрипт tcl (myscript.tcl), который имеет цикл while {1}, который вызывается (выполняется) через другой скрипт tcl (test.tcl). и если myscript.tcl застрял из-за цикла while, то как можно завершить использование test.tcl после определенного периода времени (например, 10 секунд)TCL Как закончить бесконечный цикл

+0

Когда вы говорите, что он вызывается через другой скрипт tcl, вы имеете в виду через 'exec' или вызываете процедуру? – Dinesh

+0

Улучшенный подход может выполнять валидацию в самом подчиненном устройстве и возвращать результат для управления, чтобы с ним можно было безопасно играть. – Dinesh

+0

Вызывается через другой скрипт tcl через источник myscript.tcl –

ответ

2

Если вы запустили скрипт myscript.tcl в подчиненном интерпретаторе, вы можете установить ограничение по времени выполнение с помощью interp limit, чтобы ребенок-переводчик не мог продолжать вечно; когда предел достигнут, генерируется ошибка, которая пузырится на внешний управляющий интерпретатор. Мы явно проверяем, может ли код, поддерживающий лимиты, выйти из бесконечных циклов.

set helper [interp create] 
# You might need to do some more setup here; do that before setting up the limit 
interp limit $helper time -seconds [expr {[clock seconds] + 10}] 
catch {interp eval $helper [list source myscript.tcl]} 
Смежные вопросы