| 1 | '\" | 
|---|
| 2 | '\" Copyright (c) 1990-1992 The Regents of the University of California. | 
|---|
| 3 | '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. | 
|---|
| 4 | '\" | 
|---|
| 5 | '\" See the file "license.terms" for information on usage and redistribution | 
|---|
| 6 | '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. | 
|---|
| 7 | '\"  | 
|---|
| 8 | '\" RCS: @(#) $Id: DoOneEvent.3,v 1.6 2007/12/13 15:22:31 dgp Exp $ | 
|---|
| 9 | '\"  | 
|---|
| 10 | .so man.macros | 
|---|
| 11 | .TH Tcl_DoOneEvent 3 7.5 Tcl "Tcl Library Procedures" | 
|---|
| 12 | .BS | 
|---|
| 13 | .SH NAME | 
|---|
| 14 | Tcl_DoOneEvent \- wait for events and invoke event handlers | 
|---|
| 15 | .SH SYNOPSIS | 
|---|
| 16 | .nf | 
|---|
| 17 | \fB#include <tcl.h>\fR | 
|---|
| 18 | .sp | 
|---|
| 19 | int | 
|---|
| 20 | \fBTcl_DoOneEvent\fR(\fIflags\fR) | 
|---|
| 21 | .SH ARGUMENTS | 
|---|
| 22 | .AS int flags | 
|---|
| 23 | .AP int flags in | 
|---|
| 24 | This parameter is normally zero.  It may be an OR-ed combination | 
|---|
| 25 | of any of the following flag bits:   | 
|---|
| 26 | \fBTCL_WINDOW_EVENTS\fR, \fBTCL_FILE_EVENTS\fR, | 
|---|
| 27 | \fBTCL_TIMER_EVENTS\fR, \fBTCL_IDLE_EVENTS\fR, \fBTCL_ALL_EVENTS\fR, | 
|---|
| 28 | or \fBTCL_DONT_WAIT\fR. | 
|---|
| 29 | .BE | 
|---|
| 30 |  | 
|---|
| 31 | .SH DESCRIPTION | 
|---|
| 32 | .PP | 
|---|
| 33 | This procedure is the entry point to Tcl's event loop; it is responsible for | 
|---|
| 34 | waiting for events and dispatching event handlers created with | 
|---|
| 35 | procedures such as \fBTk_CreateEventHandler\fR, \fBTcl_CreateFileHandler\fR, | 
|---|
| 36 | \fBTcl_CreateTimerHandler\fR, and \fBTcl_DoWhenIdle\fR. | 
|---|
| 37 | \fBTcl_DoOneEvent\fR checks to see if | 
|---|
| 38 | events are already present on the Tcl event queue; if so, | 
|---|
| 39 | it calls the handler(s) for the first (oldest) event, removes it from | 
|---|
| 40 | the queue, and returns. | 
|---|
| 41 | If there are no events ready to be handled, then \fBTcl_DoOneEvent\fR | 
|---|
| 42 | checks for new events from all possible sources. | 
|---|
| 43 | If any are found, it puts all of them on Tcl's event queue, calls | 
|---|
| 44 | handlers for the first event on the queue, and returns. | 
|---|
| 45 | If no events are found, \fBTcl_DoOneEvent\fR checks for \fBTcl_DoWhenIdle\fR | 
|---|
| 46 | callbacks; if any are found, it invokes all of them and returns. | 
|---|
| 47 | Finally, if no events or idle callbacks have been found, then | 
|---|
| 48 | \fBTcl_DoOneEvent\fR sleeps until an event occurs; then it adds any  | 
|---|
| 49 | new events to the Tcl event queue, calls handlers for the first event, | 
|---|
| 50 | and returns. | 
|---|
| 51 | The normal return value is 1 to signify that some event | 
|---|
| 52 | was processed (see below for other alternatives). | 
|---|
| 53 | .PP | 
|---|
| 54 | If the \fIflags\fR argument to \fBTcl_DoOneEvent\fR is non-zero, | 
|---|
| 55 | it restricts the kinds of events that will be processed by | 
|---|
| 56 | \fBTcl_DoOneEvent\fR. | 
|---|
| 57 | \fIFlags\fR may be an OR-ed combination of any of the following bits: | 
|---|
| 58 | .TP 27 | 
|---|
| 59 | \fBTCL_WINDOW_EVENTS\fR \- | 
|---|
| 60 | Process window system events. | 
|---|
| 61 | .TP 27 | 
|---|
| 62 | \fBTCL_FILE_EVENTS\fR \- | 
|---|
| 63 | Process file events. | 
|---|
| 64 | .TP 27 | 
|---|
| 65 | \fBTCL_TIMER_EVENTS\fR \- | 
|---|
| 66 | Process timer events. | 
|---|
| 67 | .TP 27 | 
|---|
| 68 | \fBTCL_IDLE_EVENTS\fR \- | 
|---|
| 69 | Process idle callbacks. | 
|---|
| 70 | .TP 27 | 
|---|
| 71 | \fBTCL_ALL_EVENTS\fR \- | 
|---|
| 72 | Process all kinds of events:  equivalent to OR-ing together all of the | 
|---|
| 73 | above flags or specifying none of them. | 
|---|
| 74 | .TP 27 | 
|---|
| 75 | \fBTCL_DONT_WAIT\fR \- | 
|---|
| 76 | Do not sleep:  process only events that are ready at the time of the | 
|---|
| 77 | call. | 
|---|
| 78 | .LP | 
|---|
| 79 | If any of the flags \fBTCL_WINDOW_EVENTS\fR, \fBTCL_FILE_EVENTS\fR, | 
|---|
| 80 | \fBTCL_TIMER_EVENTS\fR, or \fBTCL_IDLE_EVENTS\fR is set, then the only | 
|---|
| 81 | events that will be considered are those for which flags are set. | 
|---|
| 82 | Setting none of these flags is equivalent to the value | 
|---|
| 83 | \fBTCL_ALL_EVENTS\fR, which causes all event types to be processed. | 
|---|
| 84 | If an application has defined additional event sources with | 
|---|
| 85 | \fBTcl_CreateEventSource\fR, then additional \fIflag\fR values | 
|---|
| 86 | may also be valid, depending on those event sources. | 
|---|
| 87 | .PP | 
|---|
| 88 | The \fBTCL_DONT_WAIT\fR flag causes \fBTcl_DoOneEvent\fR not to put | 
|---|
| 89 | the process to sleep:  it will check for events but if none are found | 
|---|
| 90 | then it returns immediately with a return value of 0 to indicate | 
|---|
| 91 | that no work was done. | 
|---|
| 92 | \fBTcl_DoOneEvent\fR will also return 0 without doing anything if | 
|---|
| 93 | the only alternative is to block forever (this can happen, for example, | 
|---|
| 94 | if \fIflags\fR is \fBTCL_IDLE_EVENTS\fR and there are no | 
|---|
| 95 | \fBTcl_DoWhenIdle\fR callbacks pending, or if no event handlers or | 
|---|
| 96 | timer handlers exist). | 
|---|
| 97 | .PP | 
|---|
| 98 | \fBTcl_DoOneEvent\fR may be invoked recursively.  For example, | 
|---|
| 99 | it is possible to invoke \fBTcl_DoOneEvent\fR recursively | 
|---|
| 100 | from a handler called by \fBTcl_DoOneEvent\fR.  This sort | 
|---|
| 101 | of operation is useful in some modal situations, such | 
|---|
| 102 | as when a | 
|---|
| 103 | notification dialog has been popped up and an application wishes to | 
|---|
| 104 | wait for the user to click a button in the dialog before | 
|---|
| 105 | doing anything else. | 
|---|
| 106 |  | 
|---|
| 107 | .SH KEYWORDS | 
|---|
| 108 | callback, event, handler, idle, timer | 
|---|