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


<!-- ##### SECTION Image ##### -->


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

@void: 
@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>

@void: 
@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>

@void: 
@Returns: 


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

</para>

@void: 
@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_main_context_get_thread_default ##### -->
<para>

</para>

@void: 
@Returns: 


<!-- ##### FUNCTION g_main_context_push_thread_default ##### -->
<para>

</para>

@context: 


<!-- ##### FUNCTION g_main_context_pop_thread_default ##### -->
<para>

</para>

@context: 


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

@void: 
@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: 

<!-- ##### FUNCTION g_poll ##### -->
<para>

</para>

@fds: 
@nfds: 
@timeout: 
@Returns: 


<!-- ##### MACRO G_POLLFD_FORMAT ##### -->
<para>

</para>



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

@void: 


<!-- ##### 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:
-->


