使用TCL超时

时间:2010-03-05 19:46:46

标签: tcl

在TCL中是否有办法将一段代码包含在超时块中?我的意思是即使执行没有完成,块也会在特定超时后退出。 例如: -

timeout (interval) {
#wait for socket connection here

}

如果在间隔时间内没有建立连接,则该块退出。

谢谢和问候, 安贾尼

1 个答案:

答案 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设备进行通信。