Multithreading 为什么我的tcl线程在::thread::wait存在时退出?

Multithreading 为什么我的tcl线程在::thread::wait存在时退出?,multithreading,tcl,Multithreading,Tcl,我试图从下面的代码中理解线程的工作原理:wait 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 }] % ::t

我试图从下面的代码中理解线程的工作原理:wait

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
}]

% ::thread::exists $logger
0

为什么上面的代码不等待偶数并当场退出?

问题是您的线程创建脚本中有一些语法错误,导致无法正确启动;它异步终止并打印错误消息。在你的案例中,这个错误似乎正在消失;不知道为什么,但应该这样读:

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..."
唯一的区别是空白。Tcl关心空白。正确操作。

问题在于线程创建脚本中有一些语法错误,导致无法正确启动;它异步终止并打印错误消息。在你的案例中,这个错误似乎正在消失;不知道为什么,但应该这样读:

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..."
唯一的区别是空白。Tcl关心空白。把它弄对。

另外,我本可以用
在某些地方也可以修复此问题。经常使用它通常不被认为是最伟大的Tcl风格在某些地方也可以修复此问题。经常使用它通常不被认为是最伟大的Tcl风格。