⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gdk-threads.html

📁 最新gtk中文资料集
💻 HTML
📖 第 1 页 / 共 3 页
字号:
      G_UNLOCK (yes_or_no);      if (say_something)	{	  /* get GTK thread lock */	  gdk_threads_enter ();	  /* set label text */	  if(data-&gt;what == YES_IT_IS)	    gtk_label_set_text (GTK_LABEL (data-&gt;label), "O yes, it is!");	  else	    gtk_label_set_text (GTK_LABEL (data-&gt;label), "O no, it isn't!");	  /* release GTK thread lock */	  gdk_threads_leave ();	}    }  return NULL;}int main (int argc, char *argv[]){  GtkWidget *window;  GtkWidget *label;  yes_or_no_args yes_args, no_args;  pthread_t no_tid, yes_tid;  /* init threads */  g_thread_init (NULL);  gdk_threads_init ();  gdk_threads_enter ();  /* init gtk */  gtk_init(&amp;argc, &amp;argv);  /* init random number generator */  srand ((unsigned int) time (NULL));  /* create a window */  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);  gtk_signal_connect (GTK_OBJECT (window), "destroy",		      GTK_SIGNAL_FUNC (destroy), NULL);  gtk_container_set_border_width (GTK_CONTAINER (window), 10);  /* create a label */  label = gtk_label_new ("And now for something completely different ...");  gtk_container_add (GTK_CONTAINER (window), label);    /* show everything */  gtk_widget_show (label);  gtk_widget_show (window);  /* create the threads */  yes_args.label = label;  yes_args.what = YES_IT_IS;  pthread_create (&amp;yes_tid, NULL, argument_thread, &amp;yes_args);  no_args.label = label;  no_args.what = NO_IT_IS_NOT;  pthread_create (&amp;no_tid, NULL, argument_thread, &amp;no_args);  /* enter the GTK main loop */  gtk_main ();  gdk_threads_leave ();  return 0;}</pre></div></div><div class="refsect1" lang="en"><a name="id3281287"></a><h2>Details</h2><div class="refsect2" lang="en"><a name="id3281297"></a><h3><a name="GDK-THREADS-ENTER:CAPS"></a>GDK_THREADS_ENTER()</h3><a class="indexterm" name="id3281311"></a><pre class="programlisting">#define             GDK_THREADS_ENTER()</pre><p>This macro marks the beginning of a critical section in which GDK andGTK+ functions can be called safely and without causing raceconditions.  Only one thread at a time can be in such a critialsection. The macro expands to a no-op if <ahref="/usr/share/gtk-doc/html/glib/glib-Threads.html#G-THREADS-ENABLED:CAPS"><span class="type">G_THREADS_ENABLED</span></a> has notbeen defined. Typically <a class="link" href="gdk-Threads.html#gdk-threads-enter"><code class="function">gdk_threads_enter()</code></a> should be used instead ofthis macro.</p></div><hr><div class="refsect2" lang="en"><a name="id3281352"></a><h3><a name="GDK-THREADS-LEAVE:CAPS"></a>GDK_THREADS_LEAVE()</h3><a class="indexterm" name="id3281365"></a><pre class="programlisting">#define             GDK_THREADS_LEAVE()</pre><p>This macro marks the end of a critical section begun with <a class="link" href="gdk-Threads.html#GDK-THREADS-ENTER:CAPS"><span class="type">GDK_THREADS_ENTER</span></a>.</p></div><hr><div class="refsect2" lang="en"><a name="id3281390"></a><h3><a name="gdk-threads-init"></a>gdk_threads_init ()</h3><a class="indexterm" name="id3281402"></a><pre class="programlisting">void                gdk_threads_init                    (void);</pre><p>Initializes GDK so that it can be used from multiple threadsin conjunction with <a class="link" href="gdk-Threads.html#gdk-threads-enter"><code class="function">gdk_threads_enter()</code></a> and <a class="link" href="gdk-Threads.html#gdk-threads-leave"><code class="function">gdk_threads_leave()</code></a>.<ahref="/usr/share/gtk-doc/html/glib/glib-Threads.html#g-thread-init"><code class="function">g_thread_init()</code></a> must be called previous to this function.</p><p>This call must be made before any use of the main loop fromGTK+; to be safe, call it before <ahref="/usr/share/gtk-doc/html/gtk/gtk-General.html#gtk-init"><code class="function">gtk_init()</code></a>.</p><p></p></div><hr><div class="refsect2" lang="en"><a name="id3281476"></a><h3><a name="gdk-threads-enter"></a>gdk_threads_enter ()</h3><a class="indexterm" name="id3281489"></a><pre class="programlisting">void                gdk_threads_enter                   (void);</pre><p>This macro marks the beginning of a critical section in which GDK andGTK+ functions can be called safely and without causing raceconditions.  Only one thread at a time can be in such a critialsection.</p></div><hr><div class="refsect2" lang="en"><a name="id3281514"></a><h3><a name="gdk-threads-leave"></a>gdk_threads_leave ()</h3><a class="indexterm" name="id3281527"></a><pre class="programlisting">void                gdk_threads_leave                   (void);</pre><p>Leaves a critical region begun with <a class="link" href="gdk-Threads.html#gdk-threads-enter"><code class="function">gdk_threads_enter()</code></a>. </p></div><hr><div class="refsect2" lang="en"><a name="id3281559"></a><h3><a name="gdk-threads-mutex"></a>gdk_threads_mutex</h3><a class="indexterm" name="id3281574"></a><pre class="programlisting">extern GMutex *gdk_threads_mutex; /* private */</pre><div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Warning</h3><p><code class="literal">gdk_threads_mutex</code> is deprecated and should not be used in newly-written code.</p></div><p>The <ahref="/usr/share/gtk-doc/html/glib/glib-Threads.html#GMutex"><span class="type">GMutex</span></a> used to implement the critical region for<a class="link" href="gdk-Threads.html#gdk-threads-enter"><code class="function">gdk_threads_enter()</code></a>/<a class="link" href="gdk-Threads.html#gdk-threads-leave"><code class="function">gdk_threads_leave()</code></a>. </p></div><hr><div class="refsect2" lang="en"><a name="id3281633"></a><h3><a name="gdk-threads-set-lock-functions"></a>gdk_threads_set_lock_functions ()</h3><a class="indexterm" name="id3281649"></a><pre class="programlisting">void                gdk_threads_set_lock_functions      (<ahref="/usr/share/gtk-doc/html/gobject/gobject-Closures.html#GCallback">GCallback</a> enter_fn,                                                         <ahref="/usr/share/gtk-doc/html/gobject/gobject-Closures.html#GCallback">GCallback</a> leave_fn);</pre><p>Allows the application to replace the standard method thatGDK uses to protect its data structures. Normally, GDKcreates a single <ahref="/usr/share/gtk-doc/html/glib/glib-Threads.html#GMutex"><span class="type">GMutex</span></a> that is locked by <a class="link" href="gdk-Threads.html#gdk-threads-enter"><code class="function">gdk_threads_enter()</code></a>,and released by <a class="link" href="gdk-Threads.html#gdk-threads-leave"><code class="function">gdk_threads_leave()</code></a>; using this function anapplication provides, instead, a function <em class="parameter"><code>enter_fn</code></em> that iscalled by <a class="link" href="gdk-Threads.html#gdk-threads-enter"><code class="function">gdk_threads_enter()</code></a> and a function <em class="parameter"><code>leave_fn</code></em> that iscalled by <a class="link" href="gdk-Threads.html#gdk-threads-leave"><code class="function">gdk_threads_leave()</code></a>.</p><p>The functions must provide at least same locking functionalityas the default implementation, but can also do extra applicationspecific processing.</p><p>As an example, consider an application that has its own recursivelock that when held, holds the GTK+ lock as well. When GTK+ unlocksthe GTK+ lock when entering a recursive main loop, the applicationmust 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="gdk-Threads.html#gdk-threads-init"><code class="function">gdk_threads_init()</code></a>, and cannotbe called multiple times.</p><p></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>&#160;:</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>&#160;:</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" lang="en"><a name="id3281827"></a><h3><a name="gdk-threads-add-idle"></a>gdk_threads_add_idle ()</h3><a class="indexterm" name="id3281843"></a><pre class="programlisting"><ahref="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#guint">guint</a>               gdk_threads_add_idle                (<ahref="/usr/share/gtk-doc/html/glib/glib-The-Main-Event-Loop.html#GSourceFunc">GSourceFunc</a> function,                                                         <ahref="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer">gpointer</a> data);</pre><p>A wrapper for the common usage of <a class="link" href="gdk-Threads.html#gdk-threads-add-idle-full"><code class="function">gdk_threads_add_idle_full()</code></a> assigning the default priority, <ahref="/usr/share/gtk-doc/html/glib/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="gdk-Threads.html#gdk-threads-add-idle-full"><code class="function">gdk_threads_add_idle_full()</code></a>.</p><p></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>&#160;:</span></p></td><td> function to call</td></tr><tr><td><p><span class="term"><em class="parameter"><code>data</code></em>&#160;:</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>&#160;:</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" lang="en"><a name="id3281976"></a><h3><a name="gdk-threads-add-idle-full"></a>gdk_threads_add_idle_full ()</h3><a class="indexterm" name="id3281991"></a><pre class="programlisting"><ahref="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#guint">guint</a>               gdk_threads_add_idle_full           (<ahref="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gint">gint</a> priority,                                                         <ahref="/usr/share/gtk-doc/html/glib/glib-The-Main-Event-Loop.html#GSourceFunc">GSourceFunc</a> function,                                                         <ahref="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer">gpointer</a> data,                                                         <ahref="/usr/share/gtk-doc/html/glib/glib-Datasets.html#GDestroyNotify">GDestroyNotify</a> notify);</pre>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -