summaryrefslogtreecommitdiff
path: root/gtk+-mingw/share/gtk-doc/html/gdk3/gdk3-Threads.html
diff options
context:
space:
mode:
Diffstat (limited to 'gtk+-mingw/share/gtk-doc/html/gdk3/gdk3-Threads.html')
-rw-r--r--gtk+-mingw/share/gtk-doc/html/gdk3/gdk3-Threads.html988
1 files changed, 0 insertions, 988 deletions
diff --git a/gtk+-mingw/share/gtk-doc/html/gdk3/gdk3-Threads.html b/gtk+-mingw/share/gtk-doc/html/gdk3/gdk3-Threads.html
deleted file mode 100644
index 1c208ed..0000000
--- a/gtk+-mingw/share/gtk-doc/html/gdk3/gdk3-Threads.html
+++ /dev/null
@@ -1,988 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Threads</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
-<link rel="home" href="index.html" title="GDK 3 Reference Manual">
-<link rel="up" href="reference.html" title="API Reference">
-<link rel="prev" href="gdk3-Properties-and-Atoms.html" title="Properties and Atoms">
-<link rel="next" href="gdk3-Pango-Interaction.html" title="Pango Interaction">
-<meta name="generator" content="GTK-Doc V1.18.1 (XML mode)">
-<link rel="stylesheet" href="style.css" type="text/css">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
-<tr valign="middle">
-<td><a accesskey="p" href="gdk3-Properties-and-Atoms.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
-<td><a accesskey="u" href="reference.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
-<th width="100%" align="center">GDK 3 Reference Manual</th>
-<td><a accesskey="n" href="gdk3-Pango-Interaction.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
-</tr>
-<tr><td colspan="5" class="shortcuts">
-<a href="#gdk3-Threads.synopsis" class="shortcut">Top</a>
-  | 
- <a href="#gdk3-Threads.description" class="shortcut">Description</a>
-</td></tr>
-</table>
-<div class="refentry">
-<a name="gdk3-Threads"></a><div class="titlepage"></div>
-<div class="refnamediv"><table width="100%"><tr>
-<td valign="top">
-<h2><span class="refentrytitle"><a name="gdk3-Threads.top_of_page"></a>Threads</span></h2>
-<p>Threads — Functions for using GDK in multi-threaded programs</p>
-</td>
-<td valign="top" align="right"></td>
-</tr></table></div>
-<div class="refsynopsisdiv">
-<a name="gdk3-Threads.synopsis"></a><h2>Synopsis</h2>
-<pre class="synopsis">
-#include &lt;gdk/gdk.h&gt;
-
-#define <a class="link" href="gdk3-Threads.html#GDK-THREADS-ENTER:CAPS" title="GDK_THREADS_ENTER">GDK_THREADS_ENTER</a>
-#define <a class="link" href="gdk3-Threads.html#GDK-THREADS-LEAVE:CAPS" title="GDK_THREADS_LEAVE">GDK_THREADS_LEAVE</a>
-<span class="returnvalue">void</span> <a class="link" href="gdk3-Threads.html#gdk-threads-init" title="gdk_threads_init ()">gdk_threads_init</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
-<span class="returnvalue">void</span> <a class="link" href="gdk3-Threads.html#gdk-threads-enter" title="gdk_threads_enter ()">gdk_threads_enter</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
-<span class="returnvalue">void</span> <a class="link" href="gdk3-Threads.html#gdk-threads-leave" title="gdk_threads_leave ()">gdk_threads_leave</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
-<span class="returnvalue">void</span> <a class="link" href="gdk3-Threads.html#gdk-threads-set-lock-functions" title="gdk_threads_set_lock_functions ()">gdk_threads_set_lock_functions</a> (<em class="parameter"><code><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Closures.html#GCallback"><span class="type">GCallback</span></a> enter_fn</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Closures.html#GCallback"><span class="type">GCallback</span></a> leave_fn</code></em>);
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a> <a class="link" href="gdk3-Threads.html#gdk-threads-add-idle" title="gdk_threads_add_idle ()">gdk_threads_add_idle</a> (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-The-Main-Event-Loop.html#GSourceFunc"><span class="type">GSourceFunc</span></a> function</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> data</code></em>);
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a> <a class="link" href="gdk3-Threads.html#gdk-threads-add-idle-full" title="gdk_threads_add_idle_full ()">gdk_threads_add_idle_full</a> (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> priority</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-The-Main-Event-Loop.html#GSourceFunc"><span class="type">GSourceFunc</span></a> function</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> data</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a> notify</code></em>);
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a> <a class="link" href="gdk3-Threads.html#gdk-threads-add-timeout" title="gdk_threads_add_timeout ()">gdk_threads_add_timeout</a> (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> interval</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-The-Main-Event-Loop.html#GSourceFunc"><span class="type">GSourceFunc</span></a> function</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> data</code></em>);
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a> <a class="link" href="gdk3-Threads.html#gdk-threads-add-timeout-full" title="gdk_threads_add_timeout_full ()">gdk_threads_add_timeout_full</a> (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> priority</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> interval</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-The-Main-Event-Loop.html#GSourceFunc"><span class="type">GSourceFunc</span></a> function</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> data</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a> notify</code></em>);
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a> <a class="link" href="gdk3-Threads.html#gdk-threads-add-timeout-seconds" title="gdk_threads_add_timeout_seconds ()">gdk_threads_add_timeout_seconds</a> (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> interval</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-The-Main-Event-Loop.html#GSourceFunc"><span class="type">GSourceFunc</span></a> function</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> data</code></em>);
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a> <a class="link" href="gdk3-Threads.html#gdk-threads-add-timeout-seconds-full" title="gdk_threads_add_timeout_seconds_full ()">gdk_threads_add_timeout_seconds_full</a>
- (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> priority</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> interval</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-The-Main-Event-Loop.html#GSourceFunc"><span class="type">GSourceFunc</span></a> function</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> data</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a> notify</code></em>);
-</pre>
-</div>
-<div class="refsect1">
-<a name="gdk3-Threads.description"></a><h2>Description</h2>
-<p>
-For thread safety, GDK relies on the thread primitives in GLib,
-and on the thread-safe GLib main loop.
-</p>
-<p>
-GLib is completely thread safe (all global data is automatically
-locked), but individual data structure instances are not automatically
-locked for performance reasons. So e.g. you must coordinate
-accesses to the same <a href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> from multiple threads.
-</p>
-<p>
-GTK+ is "thread aware" but not thread safe — it provides a
-global lock controlled by <a class="link" href="gdk3-Threads.html#gdk-threads-enter" title="gdk_threads_enter ()"><code class="function">gdk_threads_enter()</code></a>/<a class="link" href="gdk3-Threads.html#gdk-threads-leave" title="gdk_threads_leave ()"><code class="function">gdk_threads_leave()</code></a>
-which protects all use of GTK+. That is, only one thread can use GTK+
-at any given time.
-</p>
-<p>
-Unfortunately the above holds with the X11 backend only. With the
-Win32 backend, GDK calls should not be attempted from multiple threads
-at all.
-</p>
-<p>
-You must call <a class="link" href="gdk3-Threads.html#gdk-threads-init" title="gdk_threads_init ()"><code class="function">gdk_threads_init()</code></a> before executing any other GTK+ or
-GDK functions in a threaded GTK+ program.
-</p>
-<p>
-Idles, timeouts, and input functions from GLib, such as <a href="http://library.gnome.org/devel/glib/unstable/glib-The-Main-Event-Loop.html#g-idle-add"><code class="function">g_idle_add()</code></a>,
-are executed outside of the main GTK+ lock. So, if you need to call
-GTK+ inside of such a callback, you must surround the callback with
-a <a class="link" href="gdk3-Threads.html#gdk-threads-enter" title="gdk_threads_enter ()"><code class="function">gdk_threads_enter()</code></a>/<a class="link" href="gdk3-Threads.html#gdk-threads-leave" title="gdk_threads_leave ()"><code class="function">gdk_threads_leave()</code></a> pair or use
-<a class="link" href="gdk3-Threads.html#gdk-threads-add-idle-full" title="gdk_threads_add_idle_full ()"><code class="function">gdk_threads_add_idle_full()</code></a> which does this for you.
-However, event dispatching from the mainloop is still executed within
-the main GTK+ lock, so callback functions connected to event signals
-like <a href="http://library.gnome.org/devel/gtk3/GtkWidget.html#GtkWidget-button-press-event"><span class="type">"button-press-event"</span></a>, do not need thread protection.
-</p>
-<p>
-In particular, this means, if you are writing widgets that might
-be used in threaded programs, you <span class="emphasis"><em>must</em></span> surround
-timeouts and idle functions in this matter.
-</p>
-<p>
-As always, you must also surround any calls to GTK+ not made within
-a signal handler with a <a class="link" href="gdk3-Threads.html#gdk-threads-enter" title="gdk_threads_enter ()"><code class="function">gdk_threads_enter()</code></a>/<a class="link" href="gdk3-Threads.html#gdk-threads-leave" title="gdk_threads_leave ()"><code class="function">gdk_threads_leave()</code></a> pair.
-</p>
-<p>
-Before calling <a class="link" href="gdk3-Threads.html#gdk-threads-leave" title="gdk_threads_leave ()"><code class="function">gdk_threads_leave()</code></a> from a thread other
-than your main thread, you probably want to call <a class="link" href="gdk3-General.html#gdk-flush" title="gdk_flush ()"><code class="function">gdk_flush()</code></a>
-to send all pending commands to the windowing system.
-(The reason you don't need to do this from the main thread
-is that GDK always automatically flushes pending commands
-when it runs out of incoming events to process and has
-to sleep while waiting for more events.)
-</p>
-<p>
-A minimal main program for a threaded GTK+ application
-looks like:
-</p>
-<div class="informalexample">
- <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
- <tbody>
- <tr>
- <td class="listing_lines" align="right"><pre>1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18</pre></td>
- <td class="listing_code"><pre class="programlisting"><span class="type">int</span>
-<span class="function">main</span><span class="normal"> </span><span class="symbol">(</span><span class="type">int</span><span class="normal"> argc</span><span class="symbol">,</span><span class="normal"> </span><span class="type">char</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">argv</span><span class="symbol">[])</span>
-<span class="cbracket">{</span>
-<span class="normal"> </span><span class="usertype">GtkWidget</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">window</span><span class="symbol">;</span>
-
-<span class="normal"> </span><span class="function"><a href="gdk3-Threads.html#gdk-threads-init">gdk_threads_init</a></span><span class="normal"> </span><span class="symbol">();</span>
-<span class="normal"> </span><span class="function"><a href="gdk3-Threads.html#gdk-threads-enter">gdk_threads_enter</a></span><span class="normal"> </span><span class="symbol">();</span>
-
-<span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/gtk3/gtk-General.html#gtk-init">gtk_init</a></span><span class="normal"> </span><span class="symbol">(&amp;</span><span class="normal">argc</span><span class="symbol">,</span><span class="normal"> </span><span class="symbol">&amp;</span><span class="normal">argv</span><span class="symbol">);</span>
-
-<span class="normal"> window </span><span class="symbol">=</span><span class="normal"> </span><span class="function">create_window</span><span class="normal"> </span><span class="symbol">();</span>
-<span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/gtk3/GtkWidget.html#gtk-widget-show">gtk_widget_show</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">window</span><span class="symbol">);</span>
-
-<span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/gtk3/gtk-General.html#gtk-main">gtk_main</a></span><span class="normal"> </span><span class="symbol">();</span>
-<span class="normal"> </span><span class="function"><a href="gdk3-Threads.html#gdk-threads-leave">gdk_threads_leave</a></span><span class="normal"> </span><span class="symbol">();</span>
-
-<span class="normal"> </span><span class="keyword">return</span><span class="normal"> </span><span class="number">0</span><span class="symbol">;</span>
-<span class="cbracket">}</span></pre></td>
- </tr>
- </tbody>
- </table>
-</div>
-
-<p>
-</p>
-<p>
-Callbacks require a bit of attention. Callbacks from GTK+ signals
-are made within the GTK+ lock. However callbacks from GLib (timeouts,
-IO callbacks, and idle functions) are made outside of the GTK+
-lock. So, within a signal handler you do not need to call
-<a class="link" href="gdk3-Threads.html#gdk-threads-enter" title="gdk_threads_enter ()"><code class="function">gdk_threads_enter()</code></a>, but within the other types of callbacks, you
-do.
-</p>
-<p>
-Erik Mouw contributed the following code example to
-illustrate how to use threads within GTK+ programs.
-</p>
-<div class="informalexample">
- <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
- <tbody>
- <tr>
- <td class="listing_lines" align="right"><pre>1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73
-74
-75
-76
-77
-78
-79
-80
-81
-82
-83
-84
-85
-86
-87
-88
-89
-90
-91
-92
-93
-94
-95
-96
-97
-98
-99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136</pre></td>
- <td class="listing_code"><pre class="programlisting"><span class="comment">/*-------------------------------------------------------------------------</span>
-<span class="comment"> * Filename: gtk-thread.c</span>
-<span class="comment"> * Version: 0.99.1</span>
-<span class="comment"> * Copyright: Copyright (C) 1999, Erik Mouw</span>
-<span class="comment"> * Author: Erik Mouw </span><span class="url"><a href="&lt;J.A.K.Mouw@its.tudelft.nl&gt;">&lt;J.A.K.Mouw@its.tudelft.nl&gt;</a></span>
-<span class="comment"> * Description: GTK threads example.</span>
-<span class="comment"> * Created at: Sun Oct 17 21:27:09 1999</span>
-<span class="comment"> * Modified by: Erik Mouw </span><span class="url"><a href="&lt;J.A.K.Mouw@its.tudelft.nl&gt;">&lt;J.A.K.Mouw@its.tudelft.nl&gt;</a></span>
-<span class="comment"> * Modified at: Sun Oct 24 17:21:41 1999</span>
-<span class="comment"> *-----------------------------------------------------------------------*/</span>
-<span class="comment">/*</span>
-<span class="comment"> * Compile with:</span>
-<span class="comment"> *</span>
-<span class="comment"> * cc -o gtk-thread gtk-thread.c `gtk-config --cflags --libs gthread`</span>
-<span class="comment"> *</span>
-<span class="comment"> * Thanks to Sebastian Wilhelmi and Owen Taylor for pointing out some</span>
-<span class="comment"> * bugs.</span>
-<span class="comment"> *</span>
-<span class="comment"> */</span>
-
-<span class="preproc">#include</span><span class="normal"> </span><span class="string">&lt;stdio.h&gt;</span>
-<span class="preproc">#include</span><span class="normal"> </span><span class="string">&lt;stdlib.h&gt;</span>
-<span class="preproc">#include</span><span class="normal"> </span><span class="string">&lt;unistd.h&gt;</span>
-<span class="preproc">#include</span><span class="normal"> </span><span class="string">&lt;time.h&gt;</span>
-<span class="preproc">#include</span><span class="normal"> </span><span class="string">&lt;gtk/gtk.h&gt;</span>
-<span class="preproc">#include</span><span class="normal"> </span><span class="string">&lt;glib.h&gt;</span>
-<span class="preproc">#include</span><span class="normal"> </span><span class="string">&lt;pthread.h&gt;</span>
-
-<span class="preproc">#define</span><span class="normal"> </span><span class="function">YES_IT_IS</span><span class="normal"> </span><span class="symbol">(</span><span class="number">1</span><span class="symbol">)</span>
-<span class="preproc">#define</span><span class="normal"> </span><span class="function">NO_IT_IS_NOT</span><span class="normal"> </span><span class="symbol">(</span><span class="number">0</span><span class="symbol">)</span>
-
-<span class="keyword">typedef</span><span class="normal"> </span><span class="keyword">struct</span>
-<span class="cbracket">{</span>
-<span class="normal"> </span><span class="usertype">GtkWidget</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">label</span><span class="symbol">;</span>
-<span class="normal"> </span><span class="type">int</span><span class="normal"> what</span><span class="symbol">;</span>
-<span class="cbracket">}</span><span class="normal"> yes_or_no_args</span><span class="symbol">;</span>
-
-<span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Threads.html#G-LOCK-DEFINE-STATIC:CAPS">G_LOCK_DEFINE_STATIC</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">yes_or_no</span><span class="symbol">);</span>
-<span class="keyword">static</span><span class="normal"> </span><span class="keyword">volatile</span><span class="normal"> </span><span class="type">int</span><span class="normal"> yes_or_no </span><span class="symbol">=</span><span class="normal"> YES_IT_IS</span><span class="symbol">;</span>
-
-<span class="type">void</span><span class="normal"> </span><span class="function">destroy</span><span class="normal"> </span><span class="symbol">(</span><span class="usertype">GtkWidget</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">widget</span><span class="symbol">,</span><span class="normal"> </span><span class="usertype">gpointer</span><span class="normal"> data</span><span class="symbol">)</span>
-<span class="cbracket">{</span>
-<span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/gtk3/gtk-General.html#gtk-main-quit">gtk_main_quit</a></span><span class="normal"> </span><span class="symbol">();</span>
-<span class="cbracket">}</span>
-
-<span class="type">void</span><span class="normal"> </span><span class="symbol">*</span><span class="function">argument_thread</span><span class="normal"> </span><span class="symbol">(</span><span class="type">void</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">args</span><span class="symbol">)</span>
-<span class="cbracket">{</span>
-<span class="normal"> </span><span class="usertype">yes_or_no_args</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">data </span><span class="symbol">=</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">yes_or_no_args </span><span class="symbol">*)</span><span class="normal">args</span><span class="symbol">;</span>
-<span class="normal"> </span><span class="usertype">gboolean</span><span class="normal"> say_something</span><span class="symbol">;</span>
-
-<span class="normal"> </span><span class="keyword">for</span><span class="normal"> </span><span class="symbol">(;;)</span>
-<span class="normal"> </span><span class="cbracket">{</span>
-<span class="normal"> </span><span class="comment">/* sleep a while */</span>
-<span class="normal"> </span><span class="function">sleep</span><span class="symbol">(</span><span class="function">rand</span><span class="symbol">()</span><span class="normal"> </span><span class="symbol">/</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">RAND_MAX </span><span class="symbol">/</span><span class="normal"> </span><span class="number">3</span><span class="symbol">)</span><span class="normal"> </span><span class="symbol">+</span><span class="normal"> </span><span class="number">1</span><span class="symbol">);</span>
-
-<span class="normal"> </span><span class="comment">/* lock the yes_or_no_variable */</span>
-<span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Threads.html#G-LOCK:CAPS">G_LOCK</a></span><span class="symbol">(</span><span class="normal">yes_or_no</span><span class="symbol">);</span>
-
-<span class="normal"> </span><span class="comment">/* do we have to say something? */</span>
-<span class="normal"> say_something </span><span class="symbol">=</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">yes_or_no </span><span class="symbol">!=</span><span class="normal"> data</span><span class="symbol">-&gt;</span><span class="normal">what</span><span class="symbol">);</span>
-
-<span class="normal"> </span><span class="keyword">if</span><span class="symbol">(</span><span class="normal">say_something</span><span class="symbol">)</span>
-<span class="normal"> </span><span class="cbracket">{</span>
-<span class="normal"> </span><span class="comment">/* set the variable */</span>
-<span class="normal"> yes_or_no </span><span class="symbol">=</span><span class="normal"> data</span><span class="symbol">-&gt;</span><span class="normal">what</span><span class="symbol">;</span>
-<span class="normal"> </span><span class="cbracket">}</span>
-
-<span class="normal"> </span><span class="comment">/* Unlock the yes_or_no variable */</span>
-<span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Threads.html#G-UNLOCK:CAPS">G_UNLOCK</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">yes_or_no</span><span class="symbol">);</span>
-
-<span class="normal"> </span><span class="keyword">if</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">say_something</span><span class="symbol">)</span>
-<span class="normal"> </span><span class="cbracket">{</span>
-<span class="normal"> </span><span class="comment">/* get GTK thread lock */</span>
-<span class="normal"> </span><span class="function"><a href="gdk3-Threads.html#gdk-threads-enter">gdk_threads_enter</a></span><span class="normal"> </span><span class="symbol">();</span>
-
-<span class="normal"> </span><span class="comment">/* set label text */</span>
-<span class="normal"> </span><span class="keyword">if</span><span class="symbol">(</span><span class="normal">data</span><span class="symbol">-&gt;</span><span class="normal">what </span><span class="symbol">==</span><span class="normal"> YES_IT_IS</span><span class="symbol">)</span>
-<span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/gtk3/GtkLabel.html#gtk-label-set-text">gtk_label_set_text</a></span><span class="normal"> </span><span class="symbol">(</span><span class="function">GTK_LABEL</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">data</span><span class="symbol">-&gt;</span><span class="normal">label</span><span class="symbol">),</span><span class="normal"> </span><span class="string">"O yes, it is!"</span><span class="symbol">);</span>
-<span class="normal"> </span><span class="keyword">else</span>
-<span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/gtk3/GtkLabel.html#gtk-label-set-text">gtk_label_set_text</a></span><span class="normal"> </span><span class="symbol">(</span><span class="function">GTK_LABEL</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">data</span><span class="symbol">-&gt;</span><span class="normal">label</span><span class="symbol">),</span><span class="normal"> </span><span class="string">"O no, it isn't!"</span><span class="symbol">);</span>
-
-<span class="normal"> </span><span class="comment">/* release GTK thread lock */</span>
-<span class="normal"> </span><span class="function"><a href="gdk3-Threads.html#gdk-threads-leave">gdk_threads_leave</a></span><span class="normal"> </span><span class="symbol">();</span>
-<span class="normal"> </span><span class="cbracket">}</span>
-<span class="normal"> </span><span class="cbracket">}</span>
-
-<span class="normal"> </span><span class="keyword">return</span><span class="normal"> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS">NULL</a></span><span class="symbol">;</span>
-<span class="cbracket">}</span>
-
-<span class="type">int</span><span class="normal"> </span><span class="function">main</span><span class="normal"> </span><span class="symbol">(</span><span class="type">int</span><span class="normal"> argc</span><span class="symbol">,</span><span class="normal"> </span><span class="type">char</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">argv</span><span class="symbol">[])</span>
-<span class="cbracket">{</span>
-<span class="normal"> </span><span class="usertype">GtkWidget</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">window</span><span class="symbol">;</span>
-<span class="normal"> </span><span class="usertype">GtkWidget</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">label</span><span class="symbol">;</span>
-<span class="normal"> </span><span class="usertype">yes_or_no_args</span><span class="normal"> yes_args</span><span class="symbol">,</span><span class="normal"> no_args</span><span class="symbol">;</span>
-<span class="normal"> </span><span class="usertype">pthread_t</span><span class="normal"> no_tid</span><span class="symbol">,</span><span class="normal"> yes_tid</span><span class="symbol">;</span>
-
-<span class="normal"> </span><span class="comment">/* init threads */</span>
-<span class="normal"> </span><span class="function"><a href="gdk3-Threads.html#gdk-threads-init">gdk_threads_init</a></span><span class="normal"> </span><span class="symbol">();</span>
-<span class="normal"> </span><span class="function"><a href="gdk3-Threads.html#gdk-threads-enter">gdk_threads_enter</a></span><span class="normal"> </span><span class="symbol">();</span>
-
-<span class="normal"> </span><span class="comment">/* init gtk */</span>
-<span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/gtk3/gtk-General.html#gtk-init">gtk_init</a></span><span class="symbol">(&amp;</span><span class="normal">argc</span><span class="symbol">,</span><span class="normal"> </span><span class="symbol">&amp;</span><span class="normal">argv</span><span class="symbol">);</span>
-
-<span class="normal"> </span><span class="comment">/* init random number generator */</span>
-<span class="normal"> </span><span class="function">srand</span><span class="normal"> </span><span class="symbol">((</span><span class="type">unsigned</span><span class="normal"> </span><span class="type">int</span><span class="symbol">)</span><span class="normal"> </span><span class="function">time</span><span class="normal"> </span><span class="symbol">(</span><span class="normal"><a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS">NULL</a></span><span class="symbol">));</span>
-
-<span class="normal"> </span><span class="comment">/* create a window */</span>
-<span class="normal"> window </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/gtk3/GtkWindow.html#gtk-window-new">gtk_window_new</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal"><a href="http://library.gnome.org/devel/gtk3/gtk-Standard-Enumerations.html#GTK-WINDOW-TOPLEVEL:CAPS">GTK_WINDOW_TOPLEVEL</a></span><span class="symbol">);</span>
-
-<span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#g-signal-connect">g_signal_connect</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">window</span><span class="symbol">,</span><span class="normal"> </span><span class="string">"destroy"</span><span class="symbol">,</span><span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Closures.html#G-CALLBACK:CAPS">G_CALLBACK</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">destroy</span><span class="symbol">),</span><span class="normal"> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS">NULL</a></span><span class="symbol">);</span>
-
-<span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/gtk3/GtkContainer.html#gtk-container-set-border-width">gtk_container_set_border_width</a></span><span class="normal"> </span><span class="symbol">(</span><span class="function">GTK_CONTAINER</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">window</span><span class="symbol">),</span><span class="normal"> </span><span class="number">10</span><span class="symbol">);</span>
-
-<span class="normal"> </span><span class="comment">/* create a label */</span>
-<span class="normal"> label </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/gtk3/GtkLabel.html#gtk-label-new">gtk_label_new</a></span><span class="normal"> </span><span class="symbol">(</span><span class="string">"And now for something completely different ..."</span><span class="symbol">);</span>
-<span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/gtk3/GtkContainer.html#gtk-container-add">gtk_container_add</a></span><span class="normal"> </span><span class="symbol">(</span><span class="function">GTK_CONTAINER</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">window</span><span class="symbol">),</span><span class="normal"> label</span><span class="symbol">);</span>
-
-<span class="normal"> </span><span class="comment">/* show everything */</span>
-<span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/gtk3/GtkWidget.html#gtk-widget-show">gtk_widget_show</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">label</span><span class="symbol">);</span>
-<span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/gtk3/GtkWidget.html#gtk-widget-show">gtk_widget_show</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">window</span><span class="symbol">);</span>
-
-<span class="normal"> </span><span class="comment">/* create the threads */</span>
-<span class="normal"> yes_args</span><span class="symbol">.</span><span class="normal">label </span><span class="symbol">=</span><span class="normal"> label</span><span class="symbol">;</span>
-<span class="normal"> yes_args</span><span class="symbol">.</span><span class="normal">what </span><span class="symbol">=</span><span class="normal"> YES_IT_IS</span><span class="symbol">;</span>
-<span class="normal"> </span><span class="function">pthread_create</span><span class="normal"> </span><span class="symbol">(&amp;</span><span class="normal">yes_tid</span><span class="symbol">,</span><span class="normal"> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS">NULL</a></span><span class="symbol">,</span><span class="normal"> argument_thread</span><span class="symbol">,</span><span class="normal"> </span><span class="symbol">&amp;</span><span class="normal">yes_args</span><span class="symbol">);</span>
-
-<span class="normal"> no_args</span><span class="symbol">.</span><span class="normal">label </span><span class="symbol">=</span><span class="normal"> label</span><span class="symbol">;</span>
-<span class="normal"> no_args</span><span class="symbol">.</span><span class="normal">what </span><span class="symbol">=</span><span class="normal"> NO_IT_IS_NOT</span><span class="symbol">;</span>
-<span class="normal"> </span><span class="function">pthread_create</span><span class="normal"> </span><span class="symbol">(&amp;</span><span class="normal">no_tid</span><span class="symbol">,</span><span class="normal"> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS">NULL</a></span><span class="symbol">,</span><span class="normal"> argument_thread</span><span class="symbol">,</span><span class="normal"> </span><span class="symbol">&amp;</span><span class="normal">no_args</span><span class="symbol">);</span>
-
-<span class="normal"> </span><span class="comment">/* enter the GTK main loop */</span>
-<span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/gtk3/gtk-General.html#gtk-main">gtk_main</a></span><span class="normal"> </span><span class="symbol">();</span>
-<span class="normal"> </span><span class="function"><a href="gdk3-Threads.html#gdk-threads-leave">gdk_threads_leave</a></span><span class="normal"> </span><span class="symbol">();</span>
-
-<span class="normal"> </span><span class="keyword">return</span><span class="normal"> </span><span class="number">0</span><span class="symbol">;</span>
-<span class="cbracket">}</span></pre></td>
- </tr>
- </tbody>
- </table>
-</div>
-
-<p>
-</p>
-</div>
-<div class="refsect1">
-<a name="gdk3-Threads.details"></a><h2>Details</h2>
-<div class="refsect2">
-<a name="GDK-THREADS-ENTER:CAPS"></a><h3>GDK_THREADS_ENTER</h3>
-<pre class="programlisting">#define GDK_THREADS_ENTER() gdk_threads_enter()
-</pre>
-<p>
-This macro marks the beginning of a critical section in which GDK and
-GTK+ functions can be called safely and without causing race
-conditions. Only one thread at a time can be in such a critial
-section. The macro expands to a no-op if <span class="type">G_THREADS_ENABLED</span> has not
-been defined. Typically <a class="link" href="gdk3-Threads.html#gdk-threads-enter" title="gdk_threads_enter ()"><code class="function">gdk_threads_enter()</code></a> should be used instead of
-this macro.
-</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GDK-THREADS-LEAVE:CAPS"></a><h3>GDK_THREADS_LEAVE</h3>
-<pre class="programlisting">#define GDK_THREADS_LEAVE() gdk_threads_leave()
-</pre>
-<p>
-This macro marks the end of a critical section
-begun with <a class="link" href="gdk3-Threads.html#GDK-THREADS-ENTER:CAPS" title="GDK_THREADS_ENTER"><span class="type">GDK_THREADS_ENTER</span></a>.
-</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gdk-threads-init"></a><h3>gdk_threads_init ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span> gdk_threads_init (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>
-Initializes GDK so that it can be used from multiple threads
-in conjunction with <a class="link" href="gdk3-Threads.html#gdk-threads-enter" title="gdk_threads_enter ()"><code class="function">gdk_threads_enter()</code></a> and <a class="link" href="gdk3-Threads.html#gdk-threads-leave" title="gdk_threads_leave ()"><code class="function">gdk_threads_leave()</code></a>.
-</p>
-<p>
-This call must be made before any use of the main loop from
-GTK+; to be safe, call it before <a href="http://library.gnome.org/devel/gtk3/gtk-General.html#gtk-init"><code class="function">gtk_init()</code></a>.
-</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gdk-threads-enter"></a><h3>gdk_threads_enter ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span> gdk_threads_enter (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>
-This function marks the beginning of a critical section in which
-GDK and GTK+ functions can be called safely and without causing race
-conditions. Only one thread at a time can be in such a critial
-section.
-</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gdk-threads-leave"></a><h3>gdk_threads_leave ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span> gdk_threads_leave (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>
-Leaves a critical region begun with <a class="link" href="gdk3-Threads.html#gdk-threads-enter" title="gdk_threads_enter ()"><code class="function">gdk_threads_enter()</code></a>.
-</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gdk-threads-set-lock-functions"></a><h3>gdk_threads_set_lock_functions ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span> gdk_threads_set_lock_functions (<em class="parameter"><code><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Closures.html#GCallback"><span class="type">GCallback</span></a> enter_fn</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Closures.html#GCallback"><span class="type">GCallback</span></a> leave_fn</code></em>);</pre>
-<p>
-Allows the application to replace the standard method that
-GDK uses to protect its data structures. Normally, GDK
-creates a single <a href="http://library.gnome.org/devel/glib/unstable/glib-Threads.html#GMutex"><span class="type">GMutex</span></a> that is locked by <a class="link" href="gdk3-Threads.html#gdk-threads-enter" title="gdk_threads_enter ()"><code class="function">gdk_threads_enter()</code></a>,
-and released by <a class="link" href="gdk3-Threads.html#gdk-threads-leave" title="gdk_threads_leave ()"><code class="function">gdk_threads_leave()</code></a>; using this function an
-application provides, instead, a function <em class="parameter"><code>enter_fn</code></em> that is
-called by <a class="link" href="gdk3-Threads.html#gdk-threads-enter" title="gdk_threads_enter ()"><code class="function">gdk_threads_enter()</code></a> and a function <em class="parameter"><code>leave_fn</code></em> that is
-called by <a class="link" href="gdk3-Threads.html#gdk-threads-leave" title="gdk_threads_leave ()"><code class="function">gdk_threads_leave()</code></a>.
-</p>
-<p>
-The functions must provide at least same locking functionality
-as the default implementation, but can also do extra application
-specific processing.
-</p>
-<p>
-As an example, consider an application that has its own recursive
-lock that when held, holds the GTK+ lock as well. When GTK+ unlocks
-the GTK+ lock when entering a recursive main loop, the application
-must temporarily release its lock as well.
-</p>
-<p>
-Most threaded GTK+ apps won't need to use this method.
-</p>
-<p>
-This method must be called before <a class="link" href="gdk3-Threads.html#gdk-threads-init" title="gdk_threads_init ()"><code class="function">gdk_threads_init()</code></a>, and cannot
-be called multiple times.
-</p>
-<div class="variablelist"><table border="0">
-<col align="left" valign="top">
-<tbody>
-<tr>
-<td><p><span class="term"><em class="parameter"><code>enter_fn</code></em> :</span></p></td>
-<td>function called to guard GDK</td>
-</tr>
-<tr>
-<td><p><span class="term"><em class="parameter"><code>leave_fn</code></em> :</span></p></td>
-<td>function called to release the guard</td>
-</tr>
-</tbody>
-</table></div>
-<p class="since">Since 2.4</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gdk-threads-add-idle"></a><h3>gdk_threads_add_idle ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a> gdk_threads_add_idle (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-The-Main-Event-Loop.html#GSourceFunc"><span class="type">GSourceFunc</span></a> function</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> data</code></em>);</pre>
-<p>
-A wrapper for the common usage of <a class="link" href="gdk3-Threads.html#gdk-threads-add-idle-full" title="gdk_threads_add_idle_full ()"><code class="function">gdk_threads_add_idle_full()</code></a>
-assigning the default priority, <a href="http://library.gnome.org/devel/glib/unstable/glib-The-Main-Event-Loop.html#G-PRIORITY-DEFAULT-IDLE:CAPS"><span class="type">G_PRIORITY_DEFAULT_IDLE</span></a>.
-</p>
-<p>
-See <a class="link" href="gdk3-Threads.html#gdk-threads-add-idle-full" title="gdk_threads_add_idle_full ()"><code class="function">gdk_threads_add_idle_full()</code></a>.
-</p>
-<div class="variablelist"><table border="0">
-<col align="left" valign="top">
-<tbody>
-<tr>
-<td><p><span class="term"><em class="parameter"><code>function</code></em> :</span></p></td>
-<td>function to call</td>
-</tr>
-<tr>
-<td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
-<td>data to pass to <em class="parameter"><code>function</code></em>
-</td>
-</tr>
-<tr>
-<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
-<td>the ID (greater than 0) of the event source.</td>
-</tr>
-</tbody>
-</table></div>
-<p class="since">Since 2.12</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gdk-threads-add-idle-full"></a><h3>gdk_threads_add_idle_full ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a> gdk_threads_add_idle_full (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> priority</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-The-Main-Event-Loop.html#GSourceFunc"><span class="type">GSourceFunc</span></a> function</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> data</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a> notify</code></em>);</pre>
-<p>
-Adds a function to be called whenever there are no higher priority
-events pending. If the function returns <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> it is automatically
-removed from the list of event sources and will not be called again.
-</p>
-<p>
-This variant of <a href="http://library.gnome.org/devel/glib/unstable/glib-The-Main-Event-Loop.html#g-idle-add-full"><code class="function">g_idle_add_full()</code></a> calls <em class="parameter"><code>function</code></em> with the GDK lock
-held. It can be thought of a MT-safe version for GTK+ widgets for the
-following use case, where you have to worry about <code class="function">idle_callback()</code>
-running in thread A and accessing <em class="parameter"><code>self</code></em> after it has been finalized
-in thread B:
-</p>
-<p>
-</p>
-<div class="informalexample">
- <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
- <tbody>
- <tr>
- <td class="listing_lines" align="right"><pre>1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29</pre></td>
- <td class="listing_code"><pre class="programlisting"><span class="keyword">static</span><span class="normal"> <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean">gboolean</a></span>
-<span class="function">idle_callback</span><span class="normal"> </span><span class="symbol">(</span><span class="usertype">gpointer</span><span class="normal"> data</span><span class="symbol">)</span>
-<span class="cbracket">{</span>
-<span class="normal"> </span><span class="comment">/* gdk_threads_enter(); would be needed for g_idle_add() */</span>
-
-<span class="normal"> </span><span class="usertype">SomeWidget</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">self </span><span class="symbol">=</span><span class="normal"> data</span><span class="symbol">;</span>
-<span class="normal"> </span><span class="comment">/* do stuff with self */</span>
-
-<span class="normal"> self</span><span class="symbol">-&gt;</span><span class="normal">idle_id </span><span class="symbol">=</span><span class="normal"> </span><span class="number">0</span><span class="symbol">;</span>
-
-<span class="normal"> </span><span class="comment">/* gdk_threads_leave(); would be needed for g_idle_add() */</span>
-<span class="normal"> </span><span class="keyword">return</span><span class="normal"> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS">FALSE</a></span><span class="symbol">;</span>
-<span class="cbracket">}</span>
-
-<span class="keyword">static</span><span class="normal"> </span><span class="type">void</span>
-<span class="function">some_widget_do_stuff_later</span><span class="normal"> </span><span class="symbol">(</span><span class="usertype">SomeWidget</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">self</span><span class="symbol">)</span>
-<span class="cbracket">{</span>
-<span class="normal"> self</span><span class="symbol">-&gt;</span><span class="normal">idle_id </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="gdk3-Threads.html#gdk-threads-add-idle">gdk_threads_add_idle</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">idle_callback</span><span class="symbol">,</span><span class="normal"> self</span><span class="symbol">)</span>
-<span class="normal"> </span><span class="comment">/* using g_idle_add() here would require thread protection in the callback */</span>
-<span class="cbracket">}</span>
-
-<span class="keyword">static</span><span class="normal"> </span><span class="type">void</span>
-<span class="function">some_widget_finalize</span><span class="normal"> </span><span class="symbol">(</span><span class="usertype">GObject</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">object</span><span class="symbol">)</span>
-<span class="cbracket">{</span>
-<span class="normal"> </span><span class="usertype">SomeWidget</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">self </span><span class="symbol">=</span><span class="normal"> </span><span class="function">SOME_WIDGET</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">object</span><span class="symbol">);</span>
-<span class="normal"> </span><span class="keyword">if</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">self</span><span class="symbol">-&gt;</span><span class="normal">idle_id</span><span class="symbol">)</span>
-<span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-The-Main-Event-Loop.html#g-source-remove">g_source_remove</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">self</span><span class="symbol">-&gt;</span><span class="normal">idle_id</span><span class="symbol">);</span>
-<span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#G-OBJECT-CLASS:CAPS">G_OBJECT_CLASS</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">parent_class</span><span class="symbol">)-&gt;</span><span class="function">finalize</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">object</span><span class="symbol">);</span>
-<span class="cbracket">}</span></pre></td>
- </tr>
- </tbody>
- </table>
-</div>
-
-<p>
-</p>
-<div class="variablelist"><table border="0">
-<col align="left" valign="top">
-<tbody>
-<tr>
-<td><p><span class="term"><em class="parameter"><code>priority</code></em> :</span></p></td>
-<td>the priority of the idle source. Typically this will be in the
-range between <a href="http://library.gnome.org/devel/glib/unstable/glib-The-Main-Event-Loop.html#G-PRIORITY-DEFAULT-IDLE:CAPS"><span class="type">G_PRIORITY_DEFAULT_IDLE</span></a> and <a href="http://library.gnome.org/devel/glib/unstable/glib-The-Main-Event-Loop.html#G-PRIORITY-HIGH-IDLE:CAPS"><span class="type">G_PRIORITY_HIGH_IDLE</span></a>
-</td>
-</tr>
-<tr>
-<td><p><span class="term"><em class="parameter"><code>function</code></em> :</span></p></td>
-<td>function to call</td>
-</tr>
-<tr>
-<td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
-<td>data to pass to <em class="parameter"><code>function</code></em>
-</td>
-</tr>
-<tr>
-<td><p><span class="term"><em class="parameter"><code>notify</code></em> :</span></p></td>
-<td>function to call when the idle is removed, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. <span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
-</td>
-</tr>
-<tr>
-<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
-<td>the ID (greater than 0) of the event source.</td>
-</tr>
-</tbody>
-</table></div>
-<p class="since">Since 2.12</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gdk-threads-add-timeout"></a><h3>gdk_threads_add_timeout ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a> gdk_threads_add_timeout (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> interval</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-The-Main-Event-Loop.html#GSourceFunc"><span class="type">GSourceFunc</span></a> function</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> data</code></em>);</pre>
-<p>
-A wrapper for the common usage of <a class="link" href="gdk3-Threads.html#gdk-threads-add-timeout-full" title="gdk_threads_add_timeout_full ()"><code class="function">gdk_threads_add_timeout_full()</code></a>
-assigning the default priority, <a href="http://library.gnome.org/devel/glib/unstable/glib-The-Main-Event-Loop.html#G-PRIORITY-DEFAULT:CAPS"><span class="type">G_PRIORITY_DEFAULT</span></a>.
-</p>
-<p>
-See <a class="link" href="gdk3-Threads.html#gdk-threads-add-timeout-full" title="gdk_threads_add_timeout_full ()"><code class="function">gdk_threads_add_timeout_full()</code></a>.
-</p>
-<div class="variablelist"><table border="0">
-<col align="left" valign="top">
-<tbody>
-<tr>
-<td><p><span class="term"><em class="parameter"><code>interval</code></em> :</span></p></td>
-<td>the time between calls to the function, in milliseconds
-(1/1000ths of a second)</td>
-</tr>
-<tr>
-<td><p><span class="term"><em class="parameter"><code>function</code></em> :</span></p></td>
-<td>function to call</td>
-</tr>
-<tr>
-<td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
-<td>data to pass to <em class="parameter"><code>function</code></em>
-</td>
-</tr>
-<tr>
-<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
-<td>the ID (greater than 0) of the event source.</td>
-</tr>
-</tbody>
-</table></div>
-<p class="since">Since 2.12</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gdk-threads-add-timeout-full"></a><h3>gdk_threads_add_timeout_full ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a> gdk_threads_add_timeout_full (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> priority</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> interval</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-The-Main-Event-Loop.html#GSourceFunc"><span class="type">GSourceFunc</span></a> function</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> data</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a> notify</code></em>);</pre>
-<p>
-Sets a function to be called at regular intervals holding the GDK lock,
-with the given priority. The function is called repeatedly until it
-returns <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>, at which point the timeout is automatically destroyed
-and the function will not be called again. The <em class="parameter"><code>notify</code></em> function is
-called when the timeout is destroyed. The first call to the
-function will be at the end of the first <em class="parameter"><code>interval</code></em>.
-</p>
-<p>
-Note that timeout functions may be delayed, due to the processing of other
-event sources. Thus they should not be relied on for precise timing.
-After each call to the timeout function, the time of the next
-timeout is recalculated based on the current time and the given interval
-(it does not try to 'catch up' time lost in delays).
-</p>
-<p>
-This variant of <a href="http://library.gnome.org/devel/glib/unstable/glib-The-Main-Event-Loop.html#g-timeout-add-full"><code class="function">g_timeout_add_full()</code></a> can be thought of a MT-safe version
-for GTK+ widgets for the following use case:
-</p>
-<p>
-</p>
-<div class="informalexample">
- <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
- <tbody>
- <tr>
- <td class="listing_lines" align="right"><pre>1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25</pre></td>
- <td class="listing_code"><pre class="programlisting"><span class="keyword">static</span><span class="normal"> </span><span class="usertype">gboolean</span><span class="normal"> </span><span class="function">timeout_callback</span><span class="normal"> </span><span class="symbol">(</span><span class="usertype">gpointer</span><span class="normal"> data</span><span class="symbol">)</span>
-<span class="cbracket">{</span>
-<span class="normal"> </span><span class="usertype">SomeWidget</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">self </span><span class="symbol">=</span><span class="normal"> data</span><span class="symbol">;</span>
-<span class="normal"> </span>
-<span class="normal"> </span><span class="comment">/* do stuff with self */</span>
-<span class="normal"> </span>
-<span class="normal"> self</span><span class="symbol">-&gt;</span><span class="normal">timeout_id </span><span class="symbol">=</span><span class="normal"> </span><span class="number">0</span><span class="symbol">;</span>
-<span class="normal"> </span>
-<span class="normal"> </span><span class="keyword">return</span><span class="normal"> <a href="http://library.gnome.org/devel/glib/unstable/glib-The-Main-Event-Loop.html#G-SOURCE-REMOVE:CAPS">G_SOURCE_REMOVE</a></span><span class="symbol">;</span>
-<span class="cbracket">}</span>
-<span class="normal"> </span>
-<span class="keyword">static</span><span class="normal"> </span><span class="type">void</span><span class="normal"> </span><span class="function">some_widget_do_stuff_later</span><span class="normal"> </span><span class="symbol">(</span><span class="usertype">SomeWidget</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">self</span><span class="symbol">)</span>
-<span class="cbracket">{</span>
-<span class="normal"> self</span><span class="symbol">-&gt;</span><span class="normal">timeout_id </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-The-Main-Event-Loop.html#g-timeout-add">g_timeout_add</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">timeout_callback</span><span class="symbol">,</span><span class="normal"> self</span><span class="symbol">)</span>
-<span class="cbracket">}</span>
-<span class="normal"> </span>
-<span class="keyword">static</span><span class="normal"> </span><span class="type">void</span><span class="normal"> </span><span class="function">some_widget_finalize</span><span class="normal"> </span><span class="symbol">(</span><span class="usertype">GObject</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">object</span><span class="symbol">)</span>
-<span class="cbracket">{</span>
-<span class="normal"> </span><span class="usertype">SomeWidget</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">self </span><span class="symbol">=</span><span class="normal"> </span><span class="function">SOME_WIDGET</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">object</span><span class="symbol">);</span>
-<span class="normal"> </span>
-<span class="normal"> </span><span class="keyword">if</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">self</span><span class="symbol">-&gt;</span><span class="normal">timeout_id</span><span class="symbol">)</span>
-<span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-The-Main-Event-Loop.html#g-source-remove">g_source_remove</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">self</span><span class="symbol">-&gt;</span><span class="normal">timeout_id</span><span class="symbol">);</span>
-<span class="normal"> </span>
-<span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#G-OBJECT-CLASS:CAPS">G_OBJECT_CLASS</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">parent_class</span><span class="symbol">)-&gt;</span><span class="function">finalize</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">object</span><span class="symbol">);</span>
-<span class="cbracket">}</span></pre></td>
- </tr>
- </tbody>
- </table>
-</div>
-
-<p>
-</p>
-<div class="variablelist"><table border="0">
-<col align="left" valign="top">
-<tbody>
-<tr>
-<td><p><span class="term"><em class="parameter"><code>priority</code></em> :</span></p></td>
-<td>the priority of the timeout source. Typically this will be in the
-range between <a href="http://library.gnome.org/devel/glib/unstable/glib-The-Main-Event-Loop.html#G-PRIORITY-DEFAULT-IDLE:CAPS"><span class="type">G_PRIORITY_DEFAULT_IDLE</span></a> and <a href="http://library.gnome.org/devel/glib/unstable/glib-The-Main-Event-Loop.html#G-PRIORITY-HIGH-IDLE:CAPS"><span class="type">G_PRIORITY_HIGH_IDLE</span></a>.</td>
-</tr>
-<tr>
-<td><p><span class="term"><em class="parameter"><code>interval</code></em> :</span></p></td>
-<td>the time between calls to the function, in milliseconds
-(1/1000ths of a second)</td>
-</tr>
-<tr>
-<td><p><span class="term"><em class="parameter"><code>function</code></em> :</span></p></td>
-<td>function to call</td>
-</tr>
-<tr>
-<td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
-<td>data to pass to <em class="parameter"><code>function</code></em>
-</td>
-</tr>
-<tr>
-<td><p><span class="term"><em class="parameter"><code>notify</code></em> :</span></p></td>
-<td>function to call when the timeout is removed, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. <span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
-</td>
-</tr>
-<tr>
-<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
-<td>the ID (greater than 0) of the event source.</td>
-</tr>
-</tbody>
-</table></div>
-<p class="since">Since 2.12</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gdk-threads-add-timeout-seconds"></a><h3>gdk_threads_add_timeout_seconds ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a> gdk_threads_add_timeout_seconds (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> interval</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-The-Main-Event-Loop.html#GSourceFunc"><span class="type">GSourceFunc</span></a> function</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> data</code></em>);</pre>
-<p>
-A wrapper for the common usage of <a class="link" href="gdk3-Threads.html#gdk-threads-add-timeout-seconds-full" title="gdk_threads_add_timeout_seconds_full ()"><code class="function">gdk_threads_add_timeout_seconds_full()</code></a>
-assigning the default priority, <a href="http://library.gnome.org/devel/glib/unstable/glib-The-Main-Event-Loop.html#G-PRIORITY-DEFAULT:CAPS"><span class="type">G_PRIORITY_DEFAULT</span></a>.
-</p>
-<p>
-For details, see <a class="link" href="gdk3-Threads.html#gdk-threads-add-timeout-full" title="gdk_threads_add_timeout_full ()"><code class="function">gdk_threads_add_timeout_full()</code></a>.
-</p>
-<div class="variablelist"><table border="0">
-<col align="left" valign="top">
-<tbody>
-<tr>
-<td><p><span class="term"><em class="parameter"><code>interval</code></em> :</span></p></td>
-<td>the time between calls to the function, in seconds</td>
-</tr>
-<tr>
-<td><p><span class="term"><em class="parameter"><code>function</code></em> :</span></p></td>
-<td>function to call</td>
-</tr>
-<tr>
-<td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
-<td>data to pass to <em class="parameter"><code>function</code></em>
-</td>
-</tr>
-<tr>
-<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
-<td>the ID (greater than 0) of the event source.</td>
-</tr>
-</tbody>
-</table></div>
-<p class="since">Since 2.14</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gdk-threads-add-timeout-seconds-full"></a><h3>gdk_threads_add_timeout_seconds_full ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a> gdk_threads_add_timeout_seconds_full
- (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> priority</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> interval</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-The-Main-Event-Loop.html#GSourceFunc"><span class="type">GSourceFunc</span></a> function</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> data</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a> notify</code></em>);</pre>
-<p>
-A variant of <a class="link" href="gdk3-Threads.html#gdk-threads-add-timeout-full" title="gdk_threads_add_timeout_full ()"><code class="function">gdk_threads_add_timeout_full()</code></a> with second-granularity.
-See <a href="http://library.gnome.org/devel/glib/unstable/glib-The-Main-Event-Loop.html#g-timeout-add-seconds-full"><code class="function">g_timeout_add_seconds_full()</code></a> for a discussion of why it is
-a good idea to use this function if you don't need finer granularity.
-</p>
-<div class="variablelist"><table border="0">
-<col align="left" valign="top">
-<tbody>
-<tr>
-<td><p><span class="term"><em class="parameter"><code>priority</code></em> :</span></p></td>
-<td>the priority of the timeout source. Typically this will be in the
-range between <a href="http://library.gnome.org/devel/glib/unstable/glib-The-Main-Event-Loop.html#G-PRIORITY-DEFAULT-IDLE:CAPS"><span class="type">G_PRIORITY_DEFAULT_IDLE</span></a> and <a href="http://library.gnome.org/devel/glib/unstable/glib-The-Main-Event-Loop.html#G-PRIORITY-HIGH-IDLE:CAPS"><span class="type">G_PRIORITY_HIGH_IDLE</span></a>.</td>
-</tr>
-<tr>
-<td><p><span class="term"><em class="parameter"><code>interval</code></em> :</span></p></td>
-<td>the time between calls to the function, in seconds</td>
-</tr>
-<tr>
-<td><p><span class="term"><em class="parameter"><code>function</code></em> :</span></p></td>
-<td>function to call</td>
-</tr>
-<tr>
-<td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
-<td>data to pass to <em class="parameter"><code>function</code></em>
-</td>
-</tr>
-<tr>
-<td><p><span class="term"><em class="parameter"><code>notify</code></em> :</span></p></td>
-<td>function to call when the timeout is removed, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. <span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
-</td>
-</tr>
-<tr>
-<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
-<td>the ID (greater than 0) of the event source.</td>
-</tr>
-</tbody>
-</table></div>
-<p class="since">Since 2.14</p>
-</div>
-</div>
-</div>
-<div class="footer">
-<hr>
- Generated by GTK-Doc V1.18.1</div>
-</body>
-</html> \ No newline at end of file