Frage

Ich brauche zwei-Wege-Kommunikation zwischen Threads in Tcl haben und alles, was ich bekommen kann, ist eine Möglichkeit, mit den Parametern in als meinen einzigen Master-> Helfern Kommunikationskanal vorbei. Hier ist, was ich habe:

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

die tclsh83 aufzurufen, zum Beispiel ExecProgram "tclsh83 testCases.tcl TestCase_01"

In der testCases.tcl Datei kann ich das in Informationen weitergegeben verwenden. Zum Beispiel:

set myTestCase [lindex $argv 0] 

Innerhalb testCases.tcl kann ich lösche auf das Rohr:

puts "$myTestCase"
flush stdout

Und erhalten das setzt innerhalb des Master-Faden durch die Prozess-ID mit:

gets $app line

... innerhalb einer Schleife.

Was ist nicht sehr gut. Und nicht zwei-Wege.

Wer weiß, ein einfachen 2-Wege-Kommunikationsverfahren für tcl in Windows zwischen 2 Fäden?

War es hilfreich?

Lösung

Hier ist ein kleines Beispiel, das zeigt, wie zwei Prozesse miteinander kommunizieren können. Zunächst einmal das Kind Prozess (speichern diese als child.tcl):

gets stdin line
puts [string toupper $line]

und dann der übergeordnete Prozess, der das Kind und comunicates damit beginnt:

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

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

gets $fd line
puts $line

Die Mutter verwendet den Wert von Open zurück zum Senden und Empfangen von Daten zu / von dem untergeordneten Prozess; + R-Parameter zu öffnen öffnet die Pipeline für beide lesen und schreiben.

Die Spülung ist erforderlich, da der Puffer an der Pipeline; es ist möglich, dies zu Zeile Pufferung zu ändern, um den fconfigure Befehl.

Nur ein anderer Punkt; auf den Code der Suche verwenden Sie keine Threads hier Sie ein Kind-Prozess beginnen. Tcl hat ein Gewinde-Erweiterung, die richtige interthread Kommunikation zulässt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top