Pergunta

Eu preciso ter comunicação bidireccional entre threads em Tcl e tudo que eu posso chegar é uma forma com parâmetros passando em como meu único mestre-> helper canal de comunicação. Aqui está o que eu tenho:

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

Para chamar o tclsh83, por exemplo ExecProgram "tclsh83 testCases.tcl TestCase_01"

Dentro do arquivo testCases.tcl eu posso usar que passou em informações. Por exemplo:

set myTestCase [lindex $argv 0] 

Dentro testCases.tcl posso põe para fora para o tubo:

puts "$myTestCase"
flush stdout

E receber que coloca dentro do segmento principal, utilizando o ID do processo:

gets $app line

... dentro de um loop.

O que não é muito bom. E não nos dois sentidos.

Alguém sabe de um método de comunicação de 2 vias fácil para tcl no Windows entre 2 fios?

Foi útil?

Solução

Aqui está um pequeno exemplo que mostra como dois processos podem se comunicar. Em primeiro lugar o processo filho (salve como child.tcl):

gets stdin line
puts [string toupper $line]

e, em seguida, o processo pai que começa a criança e comunicates com ele:

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

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

gets $fd line
puts $line

O pai usa o valor retornado pelo aberta para enviar e receber dados de / para o processo filho; o r + parâmetro para aberto abre o pipeline tanto para ler e escrever.

O rubor é necessária por causa do buffer no gasoduto; é possível alterar isso para linha de buffer usando o comando fconfigure.

Apenas um outro ponto; olhando para o seu código você não estiver usando tópicos aqui você está começando um processo filho. Tcl tem uma extensão de segmentação que não permite comunicações interthread adequadas.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top