GTK+ FAQ | ||
---|---|---|
<<< Previous | Development with GTK+: general questions | Next >>> |
For efficiency, the X window system batches up commands and sends them to the X server in batches instead of sending out immediately.
In a non-multithreaded program, you don't have to worry about this, since the first thing that happens when control returns to the main loop is that any outstanding X requests are sent to the X server.
However, if you are making GTK+ calls from a thread other than the main loop, then GTK+ doesn't know when to send batched commands out. For that reason, after making GTK+ calls in a separate thread, it is usually a good idea to call gdk_flush() before gdk_thread_leave().
Actually, gdk_flush() is more expensive than is necessary here, since it waits for the X server to finish outstanding commands as well; if performance is an issue, you may want to call XFlush() directly:
#include <gdk/gdkx.h> void my_flush_commands (void) { GdkDisplay *display = gdk_display_get_default (); XFlush (GDK_DISPLAY_XDISPLAY (display); } |
<<< Previous | Home | Next >>> |
Is GTK+ thread safe? How do I write multi-threaded GTK+ applications? [GTK 2.x] | Up | What's an easy way to run a function in the thread with the main loop? [GTK 2.x] |