Tcl_DoOneEvent - wait for events and invoke event handlers


       #include <tcl.h>



       int   flags   (in)      This parameter is  normally  zero.
                               It  may be an OR-ed combination of
                               any of the  following  flag  bits:
                               TCL_FILE_EVENTS, TCL_TIMER_EVENTS,
                               TCL_IDLE_EVENTS,   TCL_ALL_EVENTS,
                               or TCL_DONT_WAIT.


       This procedure is the entry point to Tcl's event loop;  it
       is  responsible  for  waiting  for  events and dispatching
       event handlers created with  procedures  such  as  Tk_Cre­
       ateEventHandler,  Tcl_CreateFileHandler,  Tcl_CreateTimer­
       Handler, and Tcl_DoWhenIdle.  Tcl_DoOneEvent checks to see
       if  events  are already present on the Tcl event queue; if
       so, it calls the handler(s) for the first (oldest)  event,
       removes  it  from the queue, and returns.  If there are no
       events ready to be handled, then Tcl_DoOneEvent checks for
       new  events  from all possible sources.  If any are found,
       it puts all of them on Tcl's event queue,  calls  handlers
       for  the  first  event  on  the queue, and returns.  If no
       events are found, Tcl_DoOneEvent checks for Tcl_DoWhenIdle
       callbacks;  if  any  are found, it invokes all of them and
       returns.  Finally, if no events  or  idle  callbacks  have
       been  found,  then  Tcl_DoOneEvent  sleeps  until an event
       occurs; then it adds any  new  events  to  the  Tcl  event
       queue,  calls  handlers  for the first event, and returns.
       The normal return value is 1 to signify  that  some  event
       was processed (see below for other alternatives).

       If  the  flags  argument to Tcl_DoOneEvent is non-zero, it
       restricts the kinds of events that will  be  processed  by
       Tcl_DoOneEvent.   Flags may be an OR-ed combination of any
       of the following bits:

       TCL_WINDOW_EVENTS -        Process window system events.

       TCL_FILE_EVENTS -          Process file events.

       TCL_ALL_EVENTS -           Process all  kinds  of  events:
                                  equivalent  to  OR-ing together
                                  all of the above flags or spec­
                                  ifying none of them.

       TCL_DONT_WAIT -            Don't   sleep:    process  only
                                  events that are  ready  at  the
                                  time of the call.

       If  any  of  the flags TCL_WINDOW_EVENTS, TCL_FILE_EVENTS,
       TCL_TIMER_EVENTS, or TCL_IDLE_EVENTS is set, then the only
       events  that  will be considered are those for which flags
       are set.  Setting none of these flags is equivalent to the
       value  TCL_ALL_EVENTS,  which causes all event types to be
       processed.  If an application has defined additional event
       sources  with  Tcl_CreateEventSource, then additional flag
       values  may  also  be  valid,  depending  on  those  event

       The  TCL_DONT_WAIT  flag  causes Tcl_DoOneEvent not to put
       the process to sleep:  it will check  for  events  but  if
       none  are  found then it returns immediately with a return
       value  of  0  to  indicate  that   no   work   was   done.
       Tcl_DoOneEvent  will  also return 0 without doing anything
       if the only alternative is to block forever (this can hap­
       pen,  for  example,  if flags is TCL_IDLE_EVENTS and there
       are no Tcl_DoWhenIdle callbacks pending, or  if  no  event
       handlers or timer handlers exist).

       Tcl_DoOneEvent  may  be invoked recursively.  For example,
       it is possible to invoke Tcl_DoOneEvent recursively from a
       handler  called by Tcl_DoOneEvent.  This sort of operation
       is useful in some modal situations, such as when a notifi­
       cation dialog has been popped up and an application wishes
       to wait for the user to  click  a  button  in  the  dialog
       before doing anything else.


       callback, event, handler, idle, timer