質問
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には、適切なスレッド間通信を可能にするスレッド拡張機能があります。
所属していません StackOverflow