在TCL中是否有办法将一段代码包含在超时块中?我的意思是即使执行没有完成,块也会在特定超时后退出。 例如: -
timeout (interval) {
#wait for socket connection here
}
如果在间隔时间内没有建立连接,则该块退出。
谢谢和问候, 安贾尼
答案 0 :(得分:5)
安贾尼,
您正在寻找vwait
。
以下是一个示例:等待五秒钟连接到服务器套接字,否则关闭套接字并继续运行脚本:
# Initialise the state
after 5000 set state timeout
set server [socket -server accept 12345]
proc accept {args} {
global state connectionInfo
set state accepted
set connectionInfo $args
}
# Wait for something to happen
vwait state
# Clean up events that could have happened
close $server
after cancel set state timeout
# Do something based on how the vwait finished...
switch $state {
timeout {
puts "no connection on port 12345"
}
accepted {
puts "connection: $connectionInfo"
puts [lindex $connectionInfo 0] "Hello there!"
}
}
修改的 您需要使用non blocking I/O与UART设备进行通信。