NAME
       vwait - Process events until a variable is written

SYNOPSIS
       vwait varName


DESCRIPTION
       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 var-
       Name has been set, the vwait command will return as soon as  the  event
       handler  that modified varName completes.  varName must globally scoped
       (either with a call to global for the varName, or with the full  names-
       pace path specification).

       In  some  cases the vwait command may not return immediately after var-
       Name 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  can-
       not return either.

EXAMPLES
       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!"
                 }
              }


SEE ALSO
       global(n), update(n)


KEYWORDS
