Re: gtk and multithreading]



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




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