tcl - resueltos - metodos de la clase thread java
TCL: comunicaciĆ³n bidireccional entre hilos en Windows (1)
Necesito tener una comunicación bidireccional entre hilos en Tcl y todo lo que puedo obtener es una forma con los parámetros que pasan como mi único canal de comunicación maestro-> ayudante. Esto es lo que tengo:
proc ExecProgram { command } {
if { [catch {open "| $command" RDWR} fd ] } {
#
# Failed, return error indication
#
error "$fd"
}
}
Para llamar al tclsh83, por ejemplo ExecProgram "tclsh83 testCases.tcl TestCase_01"
Dentro del archivo testCases.tcl puedo usar la información pasada. Por ejemplo:
set myTestCase [lindex $argv 0]
Dentro de testCases.tcl puedo poner a la tubería:
puts "$myTestCase"
flush stdout
Y reciba eso dentro del hilo maestro utilizando la ID del proceso:
gets $app line
... dentro de un bucle.
Lo cual no es muy bueno. Y no de dos vías.
¿Alguien sabe de un método de comunicación bidireccional fácil para tcl en Windows entre 2 hilos?
Aquí hay un pequeño ejemplo que muestra cómo se pueden comunicar dos procesos. Primero fuera del proceso hijo (guárdelo como child.tcl):
gets stdin line
puts [string toupper $line]
y luego el proceso principal que inicia al niño y se comunica con él:
set fd [open "| tclsh child.tcl" r+]
puts $fd "This is a test"
flush $fd
gets $fd line
puts $line
El padre usa el valor devuelto por open para enviar y recibir datos hacia / desde el proceso hijo; el parámetro r + para abrir abre la tubería tanto para lectura como para escritura.
El enjuague es necesario debido al almacenamiento en búfer en la tubería; es posible cambiar esto al almacenamiento en línea de la línea usando el comando fconfigure.
Solo otro punto más; Al mirar su código no está usando hilos aquí está iniciando un proceso secundario. Tcl tiene una extensión de enhebrado que permite comunicaciones de entrelazado adecuadas.