Multithreading 通过tcl脚本进行并行处理

Multithreading 通过tcl脚本进行并行处理,multithreading,tcl,Multithreading,Tcl,需要在tcl(windows)中进行并行处理的解决方案 我尝试了线程,但仍然无法达到预期的输出 为了简化我的要求,我举了一个简单的例子如下。 要求: 我想运行notepad.exe而不影响当前的流执行。从主线程控制转到被调用的线程,启动notepad.exe并返回主线程而不关闭记事本 尝试:(Tcl脚本) 包需要线程 定一个10 proc test_线程{b}{ puts "in procedure $b" set tid [thread::create] ;# Create a thread

需要在tcl(windows)中进行并行处理的解决方案

我尝试了线程,但仍然无法达到预期的输出

为了简化我的要求,我举了一个简单的例子如下。 要求: 我想运行notepad.exe而不影响当前的流执行。从主线程控制转到被调用的线程,启动notepad.exe并返回主线程而不关闭记事本

尝试:(Tcl脚本)

包需要线程

定一个10

proc test_线程{b}{

puts "in procedure $b"
set tid [thread::create] ;# Create a thread
return $tid
}

放“主线”

放置[thread::id]

设置ttid[测试线程$a]

线程::发送$ttid{exec c:/windows/system32/notepad.exe&}

“结束”

获取输出: 运行记事本而不显示任何日志。 关闭记事本应用程序时,我得到以下输出

主线

tid0000000000001214

在程序10中

结束

所需输出: 主线

tid0000000000001214

在程序10中

---->>控件应转到线程并在不影响主线程流的情况下运行notepad.exe。
您正在使用同步
线程::send
。当您想要返回值时,它是最方便的版本,但它会等待。您可能应该使用异步版本:

然而,令人好奇的是,
exec
调用的行为与您描述的完全一样;最后的
&
应该使它有效地异步。除非在这种情况下,Windows解释异步子流程创建的方式存在某种令人讨厌的交互。

您可能应该使用异步版本Tanks您可能应该使用异步版本我可以知道哪个版本的tcl用于异步。我尝试使用-async选项,但它不允许启动记事本应用程序。我使用的是TCL8.6。如果您有任何其他方法来解决这个问题,请让我知道。
thread::send -async $ttid {exec c:/windows/system32/notepad.exe &}
#            ^^^^^^ This flag here is what you need to add