Provided by: tcl8.5-doc_8.5.15-2ubuntu1_all bug


       vwait - Process events until a variable is written


       vwait varName


       This  command  enters the Tcl event loop to process events, blocking the application if no
       events are ready.  It continues processing events until some event handler sets the  value
       of  variable varName.  Once varName has been set, the vwait command will return as soon as
       the event handler that modified  varName  completes.   varName  must  be  globally  scoped
       (either  with  a  call  to  global  for  the  varName,  or  with  the  full namespace path

       In some cases the vwait command may not return immediately after varName is set.  This can
       happen if the event handler that sets varName does not complete immediately.  For example,
       if an event handler sets varName and then itself calls  vwait  to  wait  for  a  different
       variable, then it may not return for a long time.  During this time the top-level vwait is
       blocked waiting for the event handler to complete, so it cannot return either.


       Run the event-loop continually until some event calls exit.  (You can use any variable not
       mentioned elsewhere, but the name forever reminds you at a glance of the intent.)
              vwait forever

       Wait  five  seconds  for  a  connection to a server socket, otherwise close the socket and
       continue running the script:
              # 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!"


       global(3tcl), update(3tcl)


       event, variable, wait