thread resueltos prioridad metodos hilos fuente ejemplos componentes codigo clase tcl

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.