Re: glib: processing events in multiple threads



On Tue, 30 Apr 2013 10:44:43 -0400
"Jasper St. Pierre" <jstpierre mecheye net> wrote:
On Tue, Apr 30, 2013 at 10:40 AM, Chris Vine
<chris cvine freeserve co uk>wrote:

On Tue, 30 Apr 2013 12:01:34 +0200
Patrick Ohly <patrick ohly intel com> wrote:
On Tue, 2013-04-30 at 10:44 +0100, jcupitt 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


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