2015-10-22 3 views
1

Я запускаю интерактивный интерпретатор tcl, вызывая Tcl_main() и беря там некоторые команды tcl. После этого я хочу закрыть интерпретатор tcl и возобновить свою программу. Однако, когда я набираю «exit», он выйдет из всей программы. Есть ли способ выйти из интерпретатора tcl и продолжить мою программу? Благодарю.Могу ли я возобновить свою программу после завершения Tcl_Main()

+0

'exit' завершит процесс. –

ответ

2

Функция Tcl_Main() не предоставляет никакого способа возобновления кода после его окончания; это удобная оболочка для обработки простых программ, так что вам не нужно беспокоиться о таких вещах, но эта оболочка ограничена несколькими способами, и одна из них заключается в том, что вы не можете делать то, что вы пытаетесь сделать , (В конце функции он вызывает Tcl_Exit().)

Но вам не нужно использовать Tcl_Main()! Он просто использует публичный API Tcl (за некоторыми исключениями, которые, вероятно, не имеют для вас значения). Вы можете дублировать все, позвонив (приблизительно):

Tcl_FindExecutable(argv[0]); // ONCE PER PROCESS; INITIALISES TCL C LIBRARY 

Tcl_Interp *interp = Tcl_CreateInterp(); 
// ... now in your loop evaluate code, perhaps from the user ... 
Tcl_Eval(interp, "some code here"); 
// ... 
Tcl_DeleteInterp(interp); 

// Carry on as normal 

Там нет большой магией. Просто инициализируйте библиотеку, создайте интерпретатор, оцените свой код там (возможно, после получения его от пользователя, придумайте свой собственный цикл считывания, если хотите или закодируйте его в Tcl), а затем удалите интерпретатор, когда закончите.

+0

Это звучит неплохо. Большое спасибо. –

+0

Я предлагаю вам предоставить свой собственный 'exit', который устанавливает флаг, который разбивает цикл и вызывает [' Tcl_CancelEval'] (http://tcl.tk/man/tcl8.6/TclLib/Cancel.htm). –

Смежные вопросы