【问题标题】:Create a threads and execute a procedure on parallel with Tcl创建线程并使用 Tcl 并行执行过程
【发布时间】:2021-09-28 16:03:47
【问题描述】:

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

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 不同 线程([线程::id])。

令我惊讶的是,由 [thread::id] 标识的线程正在显示消息,但我创建的线程不执行任何操作。 如果有人能帮助我理解它,我将不胜感激。

【问题讨论】:

  • wa 命令是什么?是在新线程中定义的吗?
  • wa 命令类似于 puts,在屏幕上显示消息。

标签: multithreading tcl


【解决方案1】:

thread::send -async 上的手册页说:

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

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

也就是说,没有真正需要 thread::send'ing 给自己,这里是主线程。

【讨论】:

    猜你喜欢
    • 2018-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-19
    • 2020-12-06
    • 1970-01-01
    • 2017-04-08
    • 2012-03-10
    相关资源
    最近更新 更多