创建一个线程并使用Tcl并行执行一个过程



我正试图在辅助线程上执行一个过程,而我的其余代码将并行执行。我有一个小例子:

set thread_loadmaterials [thread::create]
thread::send -async $thread_loadmaterials [list wa "hola from thread_loadmaterials"]
thread::send -async [thread::id] [list wa "hola from thread::id"]

注意:创建的线程,由thread::exists过程检查,存在。thread_loadmaterials具有创建的线程id,它与活动线程id不同thread([thread::id])。

令我惊讶的是,[thread::id]标识的线程显示了消息,但我创建的线程什么都不做。如果有人能帮助我理解它,我会非常感激。

thread::send -async上的手册页显示:

目标线程必须进入其事件循环才能接收通过该命令发送的脚本。[…]线程可以进入事件循环显式调用thread::wait或任何其他相关的Tcl/Tk命令,如update、vwait、

脚本中的主线程(由thread::id标识)从未进入事件循环,例如,通过调用vwait

也就是说,thread::send对自身和这里的主线程并没有真正的需求。

最新更新