Re: Instabilities with multi threaded application
- From: Tiago Cogumbreiro <cogumbreiro linus uac pt>
- To: Tristan Van Berkom <vantr touchtunes com>
- Cc: Gnome-devel-list <gnome-devel-list gnome org>, spamfrommailing freax org
- Subject: Re: Instabilities with multi threaded application
- Date: Fri, 23 Jul 2004 17:57:41 +0000
On Fri, 2004-07-23 at 17:30, Tristan Van Berkom wrote:
> Tiago Cogumbreiro wrote:
> > Since Philip is using pthreads and gthreads use pthreads (in linux,
> > which i am assuming is his platform), wouldn't a simple gthreads_init,
> > suffice?
>
> g_thread_init() will not create the gdk_threads_mutex.
>
> > Also, if only one thread changes the gui is the
> > gdk_threads_{enter,leave} needed surrounding main_loop?
>
> No (this is IMO recommendable that you dedicate on thread to that).
>
> > Are g_{idle,timeout}_add add thread safe? Can i call them from another
> > problems with no problems whatsoever? I'm am routing all my gui related
> > tasks to these functions and therefore skiping the gdk lock, is this an
> > acceptable procedure?
>
> From what I understand, you can use event sources (GSource) in multiple
> threads provided that both threads run a GMainLoop and that both threads
> have thier own GMainContext.
>
> By the looks of the source, you cant use the convenience functions
> provided for timeouts and io watches etc, you would have to do something
> like this:
>
> thread() {
> GMainContext *context = g_main_context_new();
> GMainLoop *mainloop = g_main_loop_new(context, FALSE);
> GSource *source = g_timeout_source_new(interval);
>
> g_source_set_priority(source, priority);
> g_source_set_callback(source, timeout_func);
>
> g_source_attatch(source, context);
> g_main_loop_run(mainloop);
> }
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.
>
> If you havent read this then you should:
> http://developer.gnome.org/doc/API/2.0/glib/glib-The-Main-Event-Loop.html
>
> If you want to route information to your gui thread you'll have to use
> some means of IPC, you should read this thread in its entirety:
> http://mail.gnome.org/archives/gtk-list/2004-July/msg00107.html
>
> There are a few ideas tossed around in this thread on the topic.
>
> [...]
> > I'm assuming this function came from somewhere else and had the name
> > g_strtokenize, it should be g_strsplit_set. Should i fill a bug report
> > about this?
>
> Why not, I guess it wont change untill someone changes it ;-)
Well, I've just done it, including the patch to fix it :)
http://bugzilla.gnome.org/show_bug.cgi?id=148288
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]