Re: Gtk+ and multithreating



On Wed, 2007-05-16 at 21:38 +0100, Chris Vine wrote:
On Wed, 2007-05-16 at 21:32 +0100, Chris Vine wrote:
On Wed, 2007-05-16 at 16:44 +0200, Michelle Konzack wrote:
Am 2007-05-14 22:22:34, schrieb Chris Vine:
Pass the callbacks representing the events concerned to the main program
loop using g_idle_add().  Make sure the callbacks return FALSE.
g_idle_add() is thread safe, provided that you have initialised glib
with g_thread_init().

Chris
------------------------- END OF REPLIED MESSAGE -------------------------

Forgive me if I do not understand this...
Do you have a short exanple?

For the phtreads I have only copied an example-sniplet
and modified a bit and it was just working...  :-)

The documentation is here:

http://developer.gnome.org/doc/API/2.0/glib/glib-The-Main-Event-Loop.html#g-idle-add

The idea is that you call g_idle_add() in your worker thread with a
callback (function pointer and data) which you want to execute in the
main program (GUI) loop.
http://developer.gnome.org/doc/API/2.0/glib/glib-Threads.html
A simple example would be to call:

g_idle_add((GSourceFunc)g_print, "Hello\n");

Actually it occurs to me that this may not work without a wrapper
function which returns FALSE.  I am not sure what the effect of casting
a function with a void return type to a GSourceFunc type (which returns
a gboolean/int type) is.  Anyway, just put it in a wrapper function to
try out the example.

And you would need to put the "Hello" argument on the heap, and free it
in the wrapper function, because otherwise it will go out of scope
before the idle handler is called. (Sigh).  Use g_strdup() to create the
string on the heap.  Simple examples are never that simple.

Chris





[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]