Re: gtk and multithreading]



I tried doing the thread enter/leave stuff, but I get the same problems.
basically I have an example code that updates a text widget, but where
what I'm doing differs is that I'm hiding/showing widgets and for
some reason, it doesn't like it....

-Brad

Paul Danielson wrote:
> 
> I use the thread enter/leave pair in all the GTK calls in my
> individual threads...I guess the ugliness is the only drawback...it
> actually works pretty well...and though (again) I can hide behind the
> Newbie Cloak of Invisibility where it pertains to protecting my
> sensitive mind from the underpinnings of GTK, I find that if you think
> about it such that individual GTK threads are not able to update the
> same window (I have heard it alluded to that this is a xwindows
> limitation...but I have no ability to point my finger anywhere yet) at
> the same time....the thread ENTER/LEAVE pair essentially says "I want
> to update the display" and reserves a time slice in which to do so, it
> does kinda make sense, in a warped kind of way...
> 
> Until we added the ENTER/LEAVE pairs in all our widget updates, we
> were constantly running into X-related thread conflicts...since then,
> it runs smooth as glass...(just watch yourself around the edges!)
> 
> Paul
> 
> Ralph Walden wrote:
> 
> > In my case, the worker thread could do what it needed to do
> > by setting a variable that some other callback to use.  The
> > thread didn't really NEED to call any gtk functions.  I can
> > see that you might need to however.
> > One crappy way of doing it would be to set some flag variables,
> > and then check them in the main thread in a timer callback.
> > The alternative seems to be to wrap every call to GTK in a
> > GDK_THREADS_ENTER/LEAVE() pair.  YEAAACHH...
> > Brad House wrote:
> >
> >> Hmm.  How did you "set flags" for the main thread to act
> >> upon it?  Did you have to emit some sort of signal?
> >> when running gtk_main() the only way to interact with it
> >> seems to be with signals or events...
> >> what you're saying makes sense...I just don't know how to
> >> do it!
> >> Thanks.
> >> -Brad
> >> Ralph Walden wrote:
> >>
> >> > I had a similar problem using threads in a GTK application.
> >> > My problem was that my final gtk_main_quit would not end the
> >> > application.  I suppose it has to do with GTK not enjoying
> >> > multiple threads calling into GTK functions.
> >> > I solved my problem by making darn sure that my worker thread
> >> > made no GTK calls, just setting flags for the main thread to
> >> > act upon.  I know that there are gdk functions for thread
> >> > enter/exit,
> >> > but I don't understand how to use them.
> >> > Do you have to wrap EVERY call to any gtk/gdk API functions with
> >> > the
> >> > thread enter/exit calls in a multi-threaded app?
> >> > Is there a threading FAQ for GTK?
> >> > Thanks all,
> >> > Ralph Walden
> >> > Brad House wrote:
> >> >
> >> >>  I've got a problem.
> >> >>  The main program I have calls gtk_main()
> >> >>  and everything works great until I get into threads.
> >> >>  What I'm trying to do is call a thread to connect to a remote
> >> >>  server. And when it recieves a response, it needs to pop up a
> >> >>  window showing the response.
> >> >>  Well anyhow it works for the most part...I'm using libglade
> >> >>  so I'm doing a gtk_widget_show(widget);  where the widget has
> >> >>  already been referenced and hidden, etc.  But the use of
> >> >>  libglade should be most irrelevant.
> >> >>  the only problem is that the widget won't display until I move
> >> >>  the mouse...
> >> >>  if I use gtk_widget_show_now(widget) instead it gives me an
> >> >>  error
> >> >>  about the main loop running in another thread, but again it
> >> >>  displays
> >> >>  properly as soon as I move the mouse.
> >> >>  The only solution I can think of is to emit an event of some
> >> >>  sort, and
> >> >>  have the main loop capture the event and show the window for me
> >> >>  insteadof having my thread do it, but
> >> >>
> >> >>  this is my first attempt at creating any
> >> >>  GUI ... ever ... anywhere. So, the whole event structure is new
> >> >>  to me
> >> >>  (but I seem to have everything else besides threads down!)
> >> >>  Also, I looked at the example in the FAQ, and it IS showing a
> >> >>  redraw
> >> >>  of a text field.  So it seems as though a thread can update the
> >> >>  GUI,
> >> >>  so this really confuses me...maybe I'm not using the
> >> >>  gdk_enter_thread()
> >> >>  stuff properly....
> >> >>  Any help would be much appreciated...thank you.
> >> >>  -----------------------------
> >> >>  Brad House
> >> >>  Sr. Developer
> >> >>  Main Street Softworks, Inc.
> >> >>  brad mainstreetsoftworks com
> >> >>  (352) 378-8228
> >> >>  -----------------------------
> >> >>  _______________________________________________
> >> >>  gtk-list mailing list
> >> >>  gtk-list gnome org
> >> >>  http://mail.
> >> >>
> >> >>  gnome.org/mailman/listinfo/gtk-list
> >> >>
> >> > --
> >> > Ralph E. Walden
> >> > Tripos, Inc.
> >> > rwalden tripos com
> >> >
> >> --
> >> -----------------------------
> >> Brad House
> >> Sr. Developer
> >> Main Street Softworks, Inc.
> >> brad mainstreetsoftworks com
> >> (352) 378-8228
> >> -----------------------------
> >> _______________________________________________
> >> gtk-list mailing list
> >> gtk-list gnome org
> >> http://mail.gnome.org/mailman/listinfo/gtk-list
> >>
> 
> _______________________________________________ gtk-list mailing list
> gtk-list gnome org http://mail.gnome.org/mailman/listinfo/gtk-list

-- 
-----------------------------
Brad House
Sr. Developer
Main Street Softworks, Inc.

brad mainstreetsoftworks com
(352) 378-8228
-----------------------------




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