Note that GTask replaced GSimpleAsyncResult, which has a considerably
lousier API, but is still workable for doing the same thing. If you need
more availability, you should use that.


On Tue, Apr 30, 2013 at 10:58 AM, Chris Vine <ch...@cvine.freeserve.co.uk>wrote:

> On Tue, 30 Apr 2013 10:44:43 -0400
> "Jasper St. Pierre" <jstpie...@mecheye.net> wrote:
> > On Tue, Apr 30, 2013 at 10:40 AM, Chris Vine
> > <ch...@cvine.freeserve.co.uk>wrote:
> >
> > > On Tue, 30 Apr 2013 12:01:34 +0200
> > > Patrick Ohly <patrick.o...@intel.com> wrote:
> > > > On Tue, 2013-04-30 at 10:44 +0100, jcup...@gmail.com wrote:
> > > > > You can do this very simple and reliably. For example:
> > > > >
> > > > > worker()
> > > > > {
> > > > >   char *str;
> > > > >
> > > > >   for(;;) {
> > > > >     str = g_strdup("hello world!\n");
> > > > >     g_idle_add(from_worker_cb, str);
> > > > >     sleep(1);
> > > > >   }
> > > > > }
> > > > >
> > > > > gboolean
> > > > > from_worker(char *str)
> > > > > {
> > > > >   update_textview(str);
> > > > >   g_free(str);
> > > > >   return FALSE;
> > > > > }
> > > >
> > > > This is one-way. How about two-way communication between threads?
> > >
> > > In this example, the worker thread is sending stuff back to the main
> > > program thread's main loop.  It presumes that the main program
> > > thread has passed the work to the worker beforehand in an
> > > appropriate way. That could be by starting a new thread for it, by
> > > pushing it onto a thread pool, or by giving the worker thread its
> > > own main loop and pushing work to it with an idle source (you can't
> > > use g_idle_add() or g_idle_add_full() for that because those
> > > functions do not enable you to choose your GMainContext, but it is
> > > trivial to write you own function to do this in order to hand work
> > > to any thread's main loop).
> > >
> > > I have a C++ library which implements all three approaches using
> > > futures, task managers and glib main loops which I can send you an
> > > url for if you are not C++ allergic.  C++ variadic templates make
> > > this particularly straightforward.
> > >
> > Has anybody looked into GTask? It's a simple way to make a worker
> > thread for some heavy processing, give it some data, and be notified
> > on its completion or failure.
> >
> > It's the recommended way to run a synchronous task in another thread
> > in the GNOME world.
>
> That is well mentioned.  It has a nice implementation if you are stuck
> with C, provided you have glib-2.36 available.  So far, I think the
> only stable distribution with that version is ubuntu raring.  Possibly
> arch may just have acquired it.
>
> Chris
>



-- 
  Jasper
_______________________________________________
gtk-list mailing list
gtk-list@gnome.org
https://mail.gnome.org/mailman/listinfo/gtk-list

Reply via email to