需要在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任何其他是让我知道。
答案 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如何解释异步子进程创建存在某种讨厌的交互。