저는 tcl을 처음 사용합니다. 백그라운드에서 계속 호출해야하는 스레드를 tcl에 만들고 싶습니다.tcl에서 스레드를 만드는 법 8.4
#!/usr/bin/env tclsh
set serPort [open "/dev/ttyS0" RDWR]
fconfigure $serPort -mode 115200,n,8,1 -blocking 0
while { 1 } {
set data [gets $chan]
puts $data
}
나는 루프 동안 위를 사용하지 않도록하고, while 루프 내부의 기능을 반복 스레드를 만들려고합니다. 기본적으로 내 컴퓨터의 COM1을 장치에 연결하고 장치에서 직렬 데이터를 가져 오는 중입니다. 그러나 포트에 데이터가 없으면 "eof"명령을 사용하더라도 여전히 루프에서 빠져 나오지 않습니다. 그게 내가 스레드를 만들고 싶은 이유입니다.
나는 그것을 위해 Tcl_CreateThread을 사용할 계획입니다하지만 난 그게
답장을 보내 주셔서 감사합니다. 그러나 위의 코드는 직렬 포트에 데이터가 없더라도 이벤트 루프에서 벗어나 이벤트를 계속 검색하지 않는 동일한 문제를 제공합니다. 직렬 포트에 데이터가없는 경우 처리 할 다른 이벤트가 있으면 어떻게합니까? 간단히 말해서 위의 코드는 모두 내 시스템을 블럭킹하고 아무 것도 할 수 없도록합니다. 내가 여기서 말하는 말을 이해할 수 있니? 그렇다면 제발 도와주세요 – user1497818
아니, 무슨 뜻인지 이해가 안돼. 이벤트 루프를 사용하면 데이터에 대한 대기 중을 잊을 수 있습니다. 데이터를 사용할 수있을 때 호출 할 명령 접두어를 설정합니다. 주어진 시간에 여러 채널에 여러 개의 콜백을 설치할 수 있습니다. 그들은 각 외계인을 방해하지 않습니다. "이벤트 검색"과 같은 것은 없습니다. 기본적으로'vwait'를 호출하면 코드가 효과적으로 잠자기 상태가되어 콜백이 등록 된 이벤트가있을 때만 깨어나 콜백이 실행됩니다. – kostix