4

Tcl のスレッド間で双方向通信を行う必要がありますが、取得できるのは、唯一のマスター -> ヘルパー通信チャネルとしてパラメーターを渡す一方向だけです。ここに私が持っているものがあります:

proc ExecProgram { command } {
    if { [catch {open "| $command" RDWR} fd ] } {
        #
        # Failed, return error indication
        #
        error "$fd"
    }
}

tclsh83 を呼び出すには、たとえば ExecProgram "tclsh83 testCases.tcl TestCase_01"

testCases.tcl ファイル内で、渡された情報を使用できます。例えば:

set myTestCase [lindex $argv 0] 

testCases.tcl 内で、パイプに出力できます。

puts "$myTestCase"
flush stdout

そして、プロセス ID を使用して、マスター スレッド内に置きます。

gets $app line

...ループ内。

これはあまり良くありません。そして双方向ではありません。

2 つのスレッド間の Windows での tcl の簡単な双方向通信方法を知っている人はいますか?

4

1 に答える 1

4

以下は、2 つのプロセスがどのように通信できるかを示す小さな例です。最初に子プロセスをオフにします (これを child.tcl として保存します):

gets stdin line
puts [string toupper $line]

次に、子を開始して通信する親プロセス:

set fd [open "| tclsh child.tcl" r+]

puts $fd "This is a test"
flush $fd

gets $fd line
puts $line

親は open によって返された値を使用して、子プロセスとの間でデータを送受信します。open する r+ パラメータは、読み取りと書き込みの両方のパイプラインを開きます。

パイプラインでのバッファリングのため、フラッシュが必要です。fconfigure コマンドを使用して、これを行バッファリングに変更することができます。

もう1点だけ。ここでスレッドを使用していないコードを見ると、子プロセスを開始しています。Tcl には、適切なスレッド間通信を可能にするスレッド拡張機能があります。

于 2008-11-06T13:00:04.000 に答える