| 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 |
|---|