On 3/29/07, Tobias Rapp <[EMAIL PROTECTED]> wrote: > Rick Jones wrote: > > I've only come across it while looking for other things, but perhaps the > > GAsyncQueues stuff would be useful for thread-to-thread comms? > > > > http://developer.gnome.org/doc/API/2.0/glib/glib-Asynchronous-Queues.html > > That looks exactly like the thing I'm searching for. I had a look at the > API documentation before but don't know how I missed that one. Thanks! > > > You probably still need watch routines executing the the various event > > loops (guessing). > > Yes, maybe I have to add an idle handler for the event loop with > g_idle_add() (as proposed by John) and do a g_async_queue_try_pop() in > there...
Actually no, you can just use g_idle_add() like this: my_thread() { for(;;){ // worker thread main loop Thing *stuff; stuff = g_new( Thing, 1 ); calculate_thiing( stuff ); g_idle_add( handle_stuff, stuff ); } } Then the function handle_stuff will be run by your program's main loop thread when it's next idle: handle_stuff( Thing *stuff ) { update_gui( stuff ); g_free( stuff ); } You might need something to stop the worker filling RAM with unprocessed packets of stuff if the GUI thread can't keep up with the worker's rate of production. GAsyncQueue can be used to communicate between two threads without involving the main loop at all. If one of your threads is running the GTK main loop, then g_idle_add() is far simpler. John _______________________________________________ gtk-app-devel-list mailing list gtk-app-devel-list@gnome.org http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list