通过tcl脚本进行并行处理

时间:2017-04-11 08:11:32

标签: multithreading tcl

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

我尝试使用线程,仍然无法实现所需的输出。

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

尝试:(Tcl脚本)

包需要线程

设置10

proc test_thread {b} {

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

}

放“主线”

put [thread :: id]

设置ttid [test_thread $ a]

thread :: send $ ttid {exec c:/windows/system32/notepad.exe&}

将“结束”

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

主线程

tid0000000000001214

程序10中的

期望的输出: 主线

tid0000000000001214

程序10中的

---->> 控件应该转到线程并运行notepad.exe而不影响主线程流。 << ------- 端

如此友好地帮助解决这个问题,如果从线程概念appart任何其他是让我知道。

1 个答案:

答案 0 :(得分:0)

您正在使用同步list。当你想要获得一个值时,它是最方便的版本,但它确实等待。您可能应该使用异步版本:

thread::send

然而,好奇的是thread::send -async $ttid {exec c:/windows/system32/notepad.exe &} # ^^^^^^ This flag here is what you need to add 电话的行为正如你所描述的那样;最后的exec 应该使其有效地异步。除非在这种情况下与Windows如何解释异步子进程创建存在某种讨厌的交互。