comunicação forma dois entre threads no Windows: TCL
-
06-07-2019 - |
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?
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.