2017-08-06 45 views
1

我試圖運行與新工藝 我試圖調用從主函數PROC1和PROC2 PROC,但每個人都應該有一個新的進程(或子)單獨運行新工藝而且等到它完成TCL:運行PROC從同一個文件

proc main { var } { 
     puts "main function with var: $var" 
     #call proc1 with new process 
     exec proc1 1 
     #wait till proc1 finish 
     #call proc2 with new process 
     exec proc2 2 
     #wait till proc2 finish 
     puts "Finished" 
    } 

    proc proc1 { var1 } { 
     puts "proc1 function with var: $var1" 
    } 

    proc proc2 { var2 } { 
     puts "proc2 function with var: $var2" 
    } 

我使用EXEC試過,但沒有奏效 我試着用搜索引擎,但沒有成功找到解決的辦法

我怎樣才能使它運行?

非常感謝!

+1

如果你想獨立的過程,然後讓那些特效單獨的文件中,並呼籲他們與'tclsh'過程中使用線程從此 – Dinesh

+0

考慮。它們更容易使用。 –

回答

0

最簡單的機制是把在一個單獨的文件中的程序(例如,myprocs.tcl)與額外的代碼在文件的年底以下位:

# Take a command from stdin, evaluate it, and write result to stdout 
puts [eval [read stdin]] 

然後調用使用這些程序以下幫手:

proc runproc {procname args} { 
    exec [info nameofexecutable] myprocs.tcl << [list $procname {*}$args] 2>@stderr 
} 

# Demonstrating 
set result [runproc proc1 1] 

上面沒有然而最強有力的機制。特別是,如果你在你的程序中的錯誤,事情會相當靠不住的。下面是工作得很好只要你改變你的程序return他們的結果,而不是puts荷蘭國際集團其中一個更強大的機制:

被叫方:

set cmd [read stdin] 
catch $cmd msg opts 
puts [list $msg $opts] 
exit 

主叫方:

proc runproc {procname args} { 
    set cmd [list $procname {*}$args] 
    set pair [exec [info nameofexecutable] myprocs.tcl << $cmd 2>@stderr] 
    lassign $pair msg opts 
    return -options $opts $msg 
} 

轉接橫跨同時正常stdout,或者允許子訪問呼叫者的stdin,再次需要更多的工作,以移動所述命令和控制信道,以比其它TANDARD管,和上面是一個很多東西不夠好。