Проблема заключается в том, что ваш сценарий создания потоков имеет в себе некоторые синтаксические ошибки, из-за чего он не запускается правильно; он асинхронно умирает и выводит сообщение об ошибке. Эта ошибка, кажется, пропадает в вашем случае; не знаю, почему, но она должна что-то вроде следующего содержания:
Error from thread tid0x100481000
wrong # args: should be "proc name args body"
while executing
"proc OpenLog {file} {
global fid
set fid [open $file a]
} proc CloseLog {} {
global fid
close $fid
} proc AddLog {
msg} {
global fid..."
Если исправить очевидные проблемы синтаксиса, преобразования пространства для новых строк, где это имеет значение, то мы можем получить это, которое, кажется, работает для меня:
set logger [thread::create {
proc OpenLog {file} {
global fid
set fid [open $file a]
}
proc CloseLog {} {
global fid
close $fid
}
proc AddLog {msg} {
global fid
puts $fid $msg
}
thread::wait
}]
Единственными отличиями являются пробелы. Tcl заботится о белых. Сделай это правильно.
Кроме того, я мог бы использовать ';' в некоторых местах, чтобы исправить это тоже. Его обычно не считают самым большим стилем Tcl, чтобы использовать его много. –