vwait.n
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:2k
源码类别:

通讯编程

开发平台:

Visual C++

  1. '"
  2. '" Copyright (c) 1995-1996 Sun Microsystems, Inc.
  3. '"
  4. '" See the file "license.terms" for information on usage and redistribution
  5. '" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  6. '" 
  7. '" RCS: @(#) $Id: vwait.n,v 1.4.18.1 2004/10/27 14:43:15 dkf Exp $
  8. '" 
  9. .so man.macros
  10. .TH vwait n 8.0 Tcl "Tcl Built-In Commands"
  11. .BS
  12. '" Note:  do not modify the .SH NAME line immediately below!
  13. .SH NAME
  14. vwait - Process events until a variable is written
  15. .SH SYNOPSIS
  16. fBvwaitfR fIvarNamefR
  17. .BE
  18. .SH DESCRIPTION
  19. .PP
  20. This command enters the Tcl event loop to process events, blocking
  21. the application if no events are ready.  It continues processing
  22. events until some event handler sets the value of variable
  23. fIvarNamefR.  Once fIvarNamefR has been set, the fBvwaitfR
  24. command will return as soon as the event handler that modified
  25. fIvarNamefR completes.  fIvarNamefR must globally scoped
  26. (either with a call to fBglobalfR for the fIvarNamefR, or with
  27. the full namespace path specification).
  28. .PP
  29. In some cases the fBvwaitfR command may not return immediately
  30. after fIvarNamefR is set.  This can happen if the event handler
  31. that sets fIvarNamefR does not complete immediately.  For example,
  32. if an event handler sets fIvarNamefR and then itself calls
  33. fBvwaitfR to wait for a different variable, then it may not return
  34. for a long time.  During this time the top-level fBvwaitfR is
  35. blocked waiting for the event handler to complete, so it cannot
  36. return either.
  37. .SH EXAMPLES
  38. Run the event-loop continually until some event calls fBexitfR.
  39. (You can use any variable not mentioned elsewhere, but the name
  40. fIforeverfR reminds you at a glance of the intent.)
  41. .CS
  42. fBvwaitfR forever
  43. .CE
  44. .PP
  45. Wait five seconds for a connection to a server socket, otherwise
  46. close the socket and continue running the script:
  47. .CS
  48. # Initialise the state
  49. after 5000 set state timeout
  50. set server [socket -server accept 12345]
  51. proc accept {args} {
  52.    global state connectionInfo
  53.    set state accepted
  54.    set connectionInfo $args
  55. }
  56. # Wait for something to happen
  57. fBvwaitfR state
  58. # Clean up events that could have happened
  59. close $server
  60. after cancel set state timeout
  61. # Do something based on how the vwait finished...
  62. switch $state {
  63.    timeout {
  64.       puts "no connection on port 12345"
  65.    }
  66.    accepted {
  67.       puts "connection: $connectionInfo"
  68.       puts [lindex $connectionInfo 0] "Hello there!"
  69.    }
  70. }
  71. .CE
  72. .SH "SEE ALSO"
  73. global(n), update(n)
  74. .SH KEYWORDS
  75. event, variable, wait