<!-- ##### SECTION Title ##### -->
The Main Event Loop

<!-- ##### SECTION Short_Description ##### -->
manages all available sources of events

<!-- ##### SECTION Long_Description ##### -->
  <para>
    The main event loop manages all the available sources of events for
    GLib and GTK+ applications. These events can come from any number of
    different types of sources such as file descriptors (plain files,
    pipes or sockets) and timeouts.  New types of event sources can also
    be added using g_source_attach().
  </para>
  <para>
    To allow multiple independent sets of sources to be handled in
    different threads, each source is associated with a #GMainContext.
    A #GMainContext can only be running in a single thread, but
    sources can be added to it and removed from it from other threads.
  </para>
  <para>
    Each event source is assigned a priority.  The default priority,
    #G_PRIORITY_DEFAULT, is 0.  Values less than 0 denote higher
    priorities.  Values greater than 0 denote lower priorities.  Events
    from high priority sources are always processed before events from
    lower priority sources.
  </para>
  <para>
    Idle functions can also be added, and assigned a priority. These will
    be run whenever no events with a higher priority are ready to be
    processed.
  </para>
  <para>
    The #GMainLoop data type represents a main event loop.  A #GMainLoop
    is created with g_main_loop_new(). After adding the initial event sources,
    g_main_loop_run() is called. This continuously checks for new events from
    each of the event sources and dispatches them.  Finally, the
    processing of an event from one of the sources leads to a call to
    g_main_loop_quit() to exit the main loop, and g_main_loop_run() returns.
  </para>
  <para>
    It is possible to create new instances of #GMainLoop recursively.
    This is often used in GTK+ applications when showing modal dialog
    boxes. Note that event sources are associated with a particular
    #GMainContext, and will be checked and dispatched for all main
    loops associated with that #GMainContext.
  </para>
  <para>
    GTK+ contains wrappers of some of these functions, e.g. gtk_main(),
    gtk_main_quit() and gtk_events_pending(). 
  </para>
  <refsect2>
    <title>Creating new sources types</title>
    <para>
      One of the unusual features of the GTK+ main loop functionality
      is that new types of event source can be created and used in
      addition to the builtin type of event source. A new event source
      type is used for handling GDK events. A new source type is
      created by <firstterm>deriving</firstterm> from the #GSource
      structure. The derived type of source is represented by a
      structure that has the #GSource structure as a first element,
      and other elements specific to the new source type. To create
      an instance of the new source type, call g_source_new() passing
      in the size of the derived structure and a table of functions.
      These #GSourceFuncs determine the behavior of the new source
      types.
    </para>
    <para>
      New source types basically interact with the main context
      in two ways. Their prepare function in #GSourceFuncs can set
      a timeout to determine the maximum amount of time that the
      main loop will sleep before checking the source again.  In
      addition, or as well, the source can add file descriptors to
      the set that the main context checks using g_source_add_poll().
    </para>
  </refsect2>
  <refsect2>
    <title>Customizing the main loop iteration</title>
    <para>
      Single iterations of a #GMainContext can be run with
      g_main_context_iteration(). In some cases, more detailed control
      of exactly how the details of the main loop work is desired,
      for instance, when integrating the #GMainLoop with an external
      main loop. In such cases, you can call the component functions
      of g_main_context_iteration() directly. These functions
      are g_main_context_prepare(), g_main_context_query(),
      g_main_context_check() and g_main_context_dispatch().
    </para>
    <para>
      The operation of these functions can best be seen in terms
      of a state diagram, as shown in <xref linkend="mainloop-states"/>.
    </para>
    <figure id="mainloop-states">
      <title>States of a Main Context</title>
      <graphic fileref="mainloop-states.gif" format="GIF"></graphic>
    </figure>
  </refsect2>

<!-- ##### SECTION See_Also ##### -->
<para>

</para>

<!-- ##### SECTION Stability_Level ##### -->


<!-- ##### STRUCT GMainLoop ##### -->
<para>
The <structname>GMainLoop</structname> struct is an opaque data type 
representing the main event loop of a GLib or GTK+ application.
</para>


<!-- ##### FUNCTION g_main_loop_new ##### -->
<para>

</para>

@context: 
@is_running: 
@Returns: 


<!-- ##### FUNCTION g_main_loop_ref ##### -->
<para>

</para>

@loop: 
@Returns: 


<!-- ##### FUNCTION g_main_loop_unref ##### -->
<para>

</para>

@loop: 


<!-- ##### FUNCTION g_main_loop_run ##### -->
<para>

</para>

@loop: 


<!-- ##### FUNCTION g_main_loop_quit ##### -->
<para>

</para>

@loop: 


<!-- ##### FUNCTION g_main_loop_is_running ##### -->
<para>

</para>

@loop: 
@Returns: 


<!-- ##### FUNCTION g_main_loop_get_context ##### -->
<para>

</para>

@loop: 
@Returns: 


<!-- ##### MACRO g_main_new ##### -->
<para>
Creates a new #GMainLoop for the default main loop. 
</para>

@is_running: set to %TRUE to indicate that the loop is running. This is not
very important since calling g_main_run() will set this to %TRUE anyway.
@Returns: a new #GMainLoop.
@Deprecated: 2.2: Use g_main_loop_new() instead.


<!-- ##### MACRO g_main_destroy ##### -->
<para>
Frees the memory allocated for the #GMainLoop. 
</para>

@loop: a #GMainLoop.
@Deprecated: 2.2: Use g_main_loop_unref() instead.


<!-- ##### MACRO g_main_run ##### -->
<para>
Runs a main loop until it stops running. 
</para>

@loop: a #GMainLoop.
@Deprecated: 2.2: Use g_main_loop_run() instead.


<!-- ##### MACRO g_main_quit ##### -->
<para>
Stops the #GMainLoop. If g_main_run() was called to run the #GMainLoop,
it will now return. 
</para>

@loop: a #GMainLoop.
@Deprecated: 2.2: Use g_main_loop_quit() instead.


<!-- ##### MACRO g_main_is_running ##### -->
<para>
Checks if the main loop is running. 
</para>

@loop: a #GMainLoop.
@Returns: %TRUE if the main loop is running.
@Deprecated: 2.2: USe g_main_loop_is_running() instead.


<!-- ##### MACRO G_PRIORITY_HIGH ##### -->
<para>
Use this for high priority event sources.
It is not used within GLib or GTK+.
</para>



<!-- ##### MACRO G_PRIORITY_DEFAULT ##### -->
<para>
Use this for default priority event sources.
In GLib this priority is used when adding timeout functions with
g_timeout_add().
In GDK this priority is used for events from the X server.
</para>



<!-- ##### MACRO G_PRIORITY_HIGH_IDLE ##### -->
<para>
Use this for high priority idle functions.
GTK+ uses #G_PRIORITY_HIGH_IDLE + 10 for resizing operations, and
#G_PRIORITY_HIGH_IDLE + 20 for redrawing operations. (This is done to
ensure that any pending resizes are processed before any pending redraws,
so that widgets are not redrawn twice unnecessarily.)
</para>



<!-- ##### MACRO G_PRIORITY_DEFAULT_IDLE ##### -->
<para>
Use this for default priority idle functions.
In GLib this priority is used when adding idle functions with g_idle_add().
</para>



<!-- ##### MACRO G_PRIORITY_LOW ##### -->
<para>
Use this for very low priority background tasks.
It is not used within GLib or GTK+.
</para>



<!-- ##### STRUCT GMainContext ##### -->
<para>
The <structname>GMainContext</structname> struct is an opaque data type 
representing a set of sources to be handled in a main loop. 
</para>


<!-- ##### FUNCTION g_main_context_new ##### -->
<para>

</para>

@Returns: 


<!-- ##### FUNCTION g_main_context_ref ##### -->
<para>

</para>

@context: 
@Returns: 


<!-- ##### FUNCTION g_main_context_unref ##### -->
<para>

</para>

@context: 


<!-- ##### FUNCTION g_main_context_default ##### -->
<para>

</para>

@Returns: 


<!-- ##### FUNCTION g_main_context_iteration ##### -->
<para>

</para>

@context: 
@may_block: 
@Returns: 


<!-- ##### MACRO g_main_iteration ##### -->
<para>
Runs a single iteration for the default #GMainContext.
</para>

@may_block: set to %TRUE if it should block (i.e. wait) until an event source
becomes ready. It will return after an event source has been processed.
If set to %FALSE it will return immediately if no event source is ready to be
processed.
@Returns: %TRUE if more events are pending.
@Deprecated: 2.2: Use g_main_context_iteration() instead.


<!-- ##### FUNCTION g_main_context_pending ##### -->
<para>

</para>

@context: 
@Returns: 


<!-- ##### MACRO g_main_pending ##### -->
<para>
Checks if any events are pending for the default #GMainContext
(i.e. ready to be processed).  
</para>

@Returns: %TRUE if any events are pending.
@Deprecated: 2.2: Use g_main_context_pending() instead.


<!-- ##### FUNCTION g_main_context_find_source_by_id ##### -->
<para>

</para>

@context: 
@source_id: 
@Returns: 


<!-- ##### FUNCTION g_main_context_find_source_by_user_data ##### -->
<para>

</para>

@context: 
@user_data: 
@Returns: 


<!-- ##### FUNCTION g_main_context_find_source_by_funcs_user_data ##### -->
<para>

</para>

@context: 
@funcs: 
@user_data: 
@Returns: 


<!-- ##### FUNCTION g_main_context_wakeup ##### -->
<para>

</para>

@context: 


<!-- ##### FUNCTION g_main_context_acquire ##### -->
<para>

</para>

@context: 
@Returns: 


<!-- ##### FUNCTION g_main_context_release ##### -->
<para>

</para>

@context: 


<!-- ##### FUNCTION g_main_context_is_owner ##### -->
<para>

</para>

@context: 
@Returns: 


<!-- ##### FUNCTION g_main_context_wait ##### -->
<para>

</para>

@context: 
@cond: 
@mutex: 
@Returns: 


<!-- ##### FUNCTION g_main_context_prepare ##### -->
<para>

</para>

@context: 
@priority: 
@Returns: 


<!-- ##### FUNCTION g_main_context_query ##### -->
<para>

</para>

@context: 
@max_priority: 
@timeout_: 
@fds: 
@n_fds: 
@Returns: 


<!-- ##### FUNCTION g_main_context_check ##### -->
<para>

</para>

@context: 
@max_priority: 
@fds: 
@n_fds: 
@Returns: 


<!-- ##### FUNCTION g_main_context_dispatch ##### -->
<para>

</para>

@context: 


<!-- ##### FUNCTION g_main_context_set_poll_func ##### -->
<para>

</para>

@context: 
@func: 


<!-- ##### FUNCTION g_main_context_get_poll_func ##### -->
<para>

</para>

@context: 
@Returns: 


<!-- ##### USER_FUNCTION GPollFunc ##### -->
<para>
Specifies the type of function passed to g_main_context_set_poll_func().
The semantics of the function should match those of the
<function>poll()</function> system call.
</para>

@ufds: an array of #GPollFD elements.
@nfsd: the number of elements in @ufds.
@timeout_: the maximum time to wait for an event of the file descriptors.
          A negative value indicates an infinite timeout.
@Returns: the number of #GPollFD elements which have events or errors reported,
or -1 if an error occurred.


<!-- ##### FUNCTION g_main_context_add_poll ##### -->
<para>

</para>

@context: 
@fd: 
@priority: 


<!-- ##### FUNCTION g_main_context_remove_poll ##### -->
<para>

</para>

@context: 
@fd: 


<!-- ##### FUNCTION g_main_depth ##### -->
<para>

</para>

@Returns: 


<!-- ##### FUNCTION g_main_current_source ##### -->
<para>

</para>

@Returns: 


<!-- ##### MACRO g_main_set_poll_func ##### -->
<para>
Sets the function to use for the handle polling of file descriptors
for the default main context. 
</para>

@func: the function to call to poll all file descriptors.
@Deprecated: 2.2: Use g_main_context_set_poll_func() instead.


<!-- ##### FUNCTION g_timeout_source_new ##### -->
<para>

</para>

@interval: 
@Returns: 


<!-- ##### FUNCTION g_timeout_source_new_seconds ##### -->
<para>

</para>

@interval: 
@Returns: 


<!-- ##### FUNCTION g_timeout_add ##### -->
<para>
</para>

@interval: 
@function: 
@data: 
@Returns: 


<!-- ##### FUNCTION g_timeout_add_full ##### -->
<para>
</para>

@priority: 
@interval: 
@function: 
@data: 
@notify: 
@Returns: 


<!-- ##### FUNCTION g_timeout_add_seconds ##### -->
<para>

</para>

@interval: 
@function: 
@data: 
@Returns: 


<!-- ##### FUNCTION g_timeout_add_seconds_full ##### -->
<para>

</para>

@priority: 
@interval: 
@function: 
@data: 
@notify: 
@Returns: 


<!-- ##### FUNCTION g_idle_source_new ##### -->
<para>

</para>

@Returns: 


<!-- ##### FUNCTION g_idle_add ##### -->
<para>
</para>

@function: 
@data: 
@Returns: 


<!-- ##### FUNCTION g_idle_add_full ##### -->
<para>
</para>

@priority: 
@function: 
@data: 
@notify: 
@Returns: 


<!-- ##### FUNCTION g_idle_remove_by_data ##### -->
<para>
</para>

@data: 
@Returns: 


<!-- ##### TYPEDEF GPid ##### -->
<para>
A type which is used to hold a process identification. 
On Unix, processes are identified by a process id (an 
integer), while Windows uses process handles (which are 
pointers).
</para>


<!-- ##### USER_FUNCTION GChildWatchFunc ##### -->
<para>
The type of functions to be called when a child exists.
</para>

@pid: the process id of the child process
@status: Status information about the child process,
  see waitpid(2) for more information about this field
@data: user data passed to g_child_watch_add()


<!-- ##### FUNCTION g_child_watch_source_new ##### -->
<para>

</para>

@pid: 
@Returns: 


<!-- ##### FUNCTION g_child_watch_add ##### -->
<para>

</para>

@pid: 
@function: 
@data: 
@Returns: 


<!-- ##### FUNCTION g_child_watch_add_full ##### -->
<para>

</para>

@priority: 
@pid: 
@function: 
@data: 
@notify: 
@Returns: 


<!-- ##### STRUCT GPollFD ##### -->
<para>

<informaltable pgwide="1" frame="none" role="struct">
<tgroup cols="2"><colspec colwidth="2*"/><colspec colwidth="8*"/>
<tbody>

<row>
<entry>#gint fd;</entry>
<entry>the file descriptor to poll (or a <type>HANDLE</type> on Win32 platforms).</entry>
</row>

<row>
<entry>#gushort events;</entry>
<entry>a bitwise combination of flags from #GIOCondition, specifying which
events should be polled for. Typically for reading from a file descriptor
you would use %G_IO_IN | %G_IO_HUP | %G_IO_ERR, and for writing you would use
%G_IO_OUT | %G_IO_ERR.
</entry>
</row>

<row>
<entry>#gushort revents;</entry>
<entry>a bitwise combination of flags from #GIOCondition, returned from the
<function>poll()</function> function to indicate which events occurred.
</entry>
</row>
</tbody></tgroup></informaltable>

</para>

@fd: 
@fd: 
@events: 
@revents: 

<!-- ##### STRUCT GSource ##### -->
<para>
The <structname>GSource</structname> struct is an opaque data type representing
an event source.
</para>


<!-- ##### USER_FUNCTION GSourceDummyMarshal ##### -->
<para>
This is just a placeholder for #GClosureMarshal, which cannot be used here
for dependency reasons.
</para>



<!-- ##### STRUCT GSourceFuncs ##### -->
<para>
The #GSourceFuncs struct contains a table of functions used to handle
event sources in a generic manner.
</para>
<para>
For idle sources, the prepare and check functions always return %TRUE to
indicate that the source is always ready to be processed.
The prepare function also returns a timeout value of 0 to ensure that the
poll() call doesn't block (since that would be time 
wasted which could have been spent running the idle function).
</para>
<para>
For timeout sources, the prepare and check functions both return %TRUE if the
timeout interval has expired. The prepare function also returns a timeout 
value to ensure that the poll() call doesn't block too 
long and miss the next timeout.
</para>
<para>
For file descriptor sources, the prepare function typically returns %FALSE,
since it must wait until poll() has been called before 
it knows whether any events need to be processed. It sets the returned 
timeout to -1 to indicate that it doesn't mind how long the 
poll() call blocks.
In the check function, it tests the results of the poll()
call to see if the required condition has been met, and returns %TRUE if so.
</para>

@prepare: Called before all the file descriptors are polled.
If the source can determine that it is ready here (without waiting for the
results of the poll() call) it should return %TRUE.
It can also return a @timeout_ value which should be the maximum timeout
(in milliseconds) which should be passed to the poll() call.
The actual timeout used will be -1 if all sources returned -1, or it will
be the minimum of all the @timeout_ values returned which were >= 0.
@check: Called after all the file descriptors are polled.
The source should return %TRUE if it is ready to be dispatched.
Note that some time may have passed since the previous prepare function was
called, so the source should be checked again here.
@dispatch: Called to dispatch the event source, after it has returned %TRUE in
either its @prepare or its @check function. The @dispatch function is
passed in a callback function and data. The callback function may be
%NULL if the source was never connected to a callback using
g_source_set_callback(). The @dispatch function should call the
callback function with @user_data and whatever additional parameters are
needed for this type of event source.
@finalize: Called when the source is finalized.
@closure_callback: 
@closure_marshal: 

<!-- ##### STRUCT GSourceCallbackFuncs ##### -->
<para>
The <structname>GSourceCallbackFuncs</structname> struct contains
functions for managing callback objects. 
</para>

@ref: Called when a reference is added to the callback object.
@unref: Called when a reference to the callback object is dropped.
@get: Called to extract the callback function and data from the callback object.

<!-- ##### FUNCTION g_source_new ##### -->
<para>

</para>

@source_funcs: 
@struct_size: 
@Returns: 


<!-- ##### FUNCTION g_source_ref ##### -->
<para>

</para>

@source: 
@Returns: 


<!-- ##### FUNCTION g_source_unref ##### -->
<para>

</para>

@source: 


<!-- ##### FUNCTION g_source_set_funcs ##### -->
<para>

</para>

@source: 
@funcs: 


<!-- ##### FUNCTION g_source_attach ##### -->
<para>

</para>

@source: 
@context: 
@Returns: 


<!-- ##### FUNCTION g_source_destroy ##### -->
<para>

</para>

@source: 


<!-- ##### FUNCTION g_source_is_destroyed ##### -->
<para>

</para>

@source: 
@Returns: 


<!-- ##### FUNCTION g_source_set_priority ##### -->
<para>

</para>

@source: 
@priority: 


<!-- ##### FUNCTION g_source_get_priority ##### -->
<para>

</para>

@source: 
@Returns: 


<!-- ##### FUNCTION g_source_set_can_recurse ##### -->
<para>

</para>

@source: 
@can_recurse: 


<!-- ##### FUNCTION g_source_get_can_recurse ##### -->
<para>

</para>

@source: 
@Returns: 


<!-- ##### FUNCTION g_source_get_id ##### -->
<para>

</para>

@source: 
@Returns: 


<!-- ##### FUNCTION g_source_get_context ##### -->
<para>

</para>

@source: 
@Returns: 


<!-- ##### FUNCTION g_source_set_callback ##### -->
<para>

</para>

@source: 
@func: 
@data: 
@notify: 


<!-- ##### USER_FUNCTION GSourceFunc ##### -->
<para>
Specifies the type of function passed to g_timeout_add(), g_timeout_add_full(),
g_idle_add(), and g_idle_add_full().
</para>

@data: data passed to the function, set when the source was created with one
of the above functions.
@Returns: it should return %FALSE if the source should be removed.


<!-- ##### FUNCTION g_source_set_callback_indirect ##### -->
<para>

</para>

@source: 
@callback_data: 
@callback_funcs: 


<!-- ##### FUNCTION g_source_add_poll ##### -->
<para>

</para>

@source: 
@fd: 


<!-- ##### FUNCTION g_source_remove_poll ##### -->
<para>

</para>

@source: 
@fd: 


<!-- ##### FUNCTION g_source_get_current_time ##### -->
<para>

</para>

@source: 
@timeval: 


<!-- ##### FUNCTION g_source_remove ##### -->
<para>
</para>

@tag: 
@Returns: 


<!-- ##### FUNCTION g_source_remove_by_funcs_user_data ##### -->
<para>
</para>

@funcs: 
@user_data: 
@Returns: 


<!-- ##### FUNCTION g_source_remove_by_user_data ##### -->
<para>
</para>

@user_data: 
@Returns: 

<!--
Local variables:
mode: sgml
sgml-parent-document: ("../glib-docs.sgml" "book" "refsect2" "")
End:
-->


