質問

Tclのスレッド間で双方向通信を行う必要があります。取得できるのは、唯一のマスターおよびヘルパー通信チャネルとして渡されるパラメーターを使用した1つの方法です。ここに私が持っているものがあります:

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

...ループ内で。

あまり良くない。双方向ではありません。

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

役に立ちましたか?

解決

これは、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によって返された値を使用して、子プロセスとの間でデータを送受信します。開くr +パラメーターは、読み取りと書き込みの両方のパイプラインを開きます。

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top