Re: Threads
- From: Russell Shaw <rjshaw netspace net au>
- Cc: gtk-app-devel-list gnome org
- Subject: Re: Threads
- Date: Thu, 16 Dec 2004 02:47:50 +1100
Olexiy Avramchenko wrote:
Russell Shaw wrote:
Hi,
In the faq on threads (http://www.gtk.org/faq/#AEN482), there is:
int
main (int argc, char *argv[])
{
GtkWidget *window;
/* init threads */ g_thread_init(NULL);
gdk_threads_init();
/* init gtk */
gtk_init(&argc, &argv);
window = create_window();
gtk_widget_show(window);
gdk_threads_enter();
gtk_main();
gdk_threads_leave();
return 0;
}
Because gdk_threads_enter()/leave() surround gtk_main(), then
wouldn't that mean other threads that use gdk_threads_enter()/leave()
are always blocked until gtk_main() exits?
Hello,
No, gtk_main unlocks mutex before g_main_loop_run() call and then GDK
code locks it just before gtk_main_do_event() call. So, mutex is locked
only when event is processing.
silly me, i did a case-sensitive grep for threads.
Ok, in gtkmain.c:
void
gtk_main (void)
{
...
if (g_main_loop_is_running (main_loops->data))
{
GDK_THREADS_LEAVE ();
g_main_loop_run (loop);
GDK_THREADS_ENTER ();
gdk_flush ();
}
...
}
So if g_main_loop_run() runs for the duration of the app, then there is nothing
guarding gdk calls made by gtk callbacks. So, doesn't this mean that every gtk
operation in a gtk callback that eventually calls a gdk function, should be
surrounded by gdk_threads_enter()/leave() ?
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]