tcl/tk参考——控制结构vwait
2008-03-22 19:31
405 查看
.
.
在一些情况下在varName被修改后vwait命令可能不会立刻返回,如果设置varName的事件句柄没有完成,那么vwait命令就不会立刻返回。例如,如果一个事件句柄设置varName,然后它自己调用vwait去等待一个不同的变量,这样的话有可能需要经过长时间后才能返回。在这种情况下最高堆栈层的vwait命令阻塞,等待事件句柄完成,所以不能返回。
在连接一个服务器套接字时等待5秒钟,否则关闭套接字继续运行脚本。
.
名称
vwait - 一直等待直到一个变量被修改为止语法
vwait varName描述
这个命令进入Tcl事件循环,Tcl将会一直处理事件直到变量varName被修改为止,一旦varName被修改了,vwait命令将会立刻返回,varName必须是一个全局范围变量。(要么是一个全局变量,要么带有完全的名字空间路径)。在一些情况下在varName被修改后vwait命令可能不会立刻返回,如果设置varName的事件句柄没有完成,那么vwait命令就不会立刻返回。例如,如果一个事件句柄设置varName,然后它自己调用vwait去等待一个不同的变量,这样的话有可能需要经过长时间后才能返回。在这种情况下最高堆栈层的vwait命令阻塞,等待事件句柄完成,所以不能返回。
示例
运行事件循环直到一些事件调用exit。vwait forever
在连接一个服务器套接字时等待5秒钟,否则关闭套接字继续运行脚本。
# 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!"
}
}
相关文章推荐
- cvs移植的问题:setgid failed: Operation not permitted
- Traits of the blood types
- TDSSNIClient initialization failed with error 0x7e, status code 0x60.
- Inversion of Control Containers and the Dependency Injection pattern
- 中移动为何惧怕Nokia和iPhone
- mail邮件退信常见错误
- Addon domain SubDomain Parked Domains
- 关于rails2.0.2中使用scaffold报错的问题
- DOMINO邮件服务器,foxmail收邮件问题
- 主板集成的Adaptec Embeded SATA HostRAID-SATA控制器设置
- 磁盘阵列RAID详解
- 我可以写“void main()”吗?
- my e-mail (备忘之用)
- 优秀课件笔记之员工培训组织的人力资源开发
- Dertermining IP information for eth0....failed - no link present check cable
- 分析和测试行链接(Row Chaining)及行迁移(Row Migrating)
- 漂亮的文本框+Email正则表达式
- my boss - Jen
- webkit + windows + cairo
- RAID与大容量存储