Re: Instabilities with multi threaded application
- From: Tristan Van Berkom <vantr touchtunes com>
- To: Tiago Cogumbreiro <cogumbreiro linus uac pt>
- Cc: Gnome-devel-list <gnome-devel-list gnome org>, GTK+ app devel list <gtk-app-devel-list gnome org>, spamfrommailing freax org
- Subject: Re: Instabilities with multi threaded application
- Date: Fri, 23 Jul 2004 14:21:12 -0400
Tiago Cogumbreiro wrote:
[...]
Ouch, i was just doing this in the other thread:
MyGObject *self = MY_OBJECT(data);
/* push current state to queue */
g_async_queue_push(self->queue, GINT_TO_POINTER(new_state);
/* now start a g_idle call */
g_idle_add (on_event, data);
But, strangely enough, it works like a charm. I'll read the main event
loop more throughly.
Hmmm, but you are not running a mainloop in your thread are you,
in which case your `on_event' function is getting called in your
parent thread, it looks neat and all, but I have a feeling that its
unsafe to modify a GMainContext from another thread, there is probably
a race condition in your code where both threads access the main
context at the same time and produce that age old "unpredictable behaviour".
In the thread I pointed out in the previous mail, we discuss implementing
an event source which pops elements off of a GAsyncQueue, where the thread
that pushes onto the queue, calls g_main_context_wakeup() on the context
of the recieving thread.
Cheers,
-Tristan
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]