Re: gdk threads ...
- From: Michael Meeks <michael meeks suse com>
- To: Paul Davis <paul linuxaudiosystems com>
- Cc: Ryan Lortie <desrt desrt ca>, Gtk Hackers <gtk-devel-list gnome org>
- Subject: Re: gdk threads ...
- Date: Mon, 21 May 2012 12:36:28 +0100
Hi Paul,
On Wed, 2012-04-25 at 09:05 -0400, Paul Davis wrote:
> there seems to be some confusion here. I've read back over your posts
> in the this thread. I don't see you mentioning libreoffice doing
> anything that requires thread enter/leave calls.
Heh :-) sorry for the slow rate of response on this thread; no shortage
of tangled monsters to slay elsewhere just now.
> You've mentioned idle callbacks, timeout callbacks. Idle callbacks
> can be setup without any thread locking (g_idle_add() and its cousins
> are probably the one actually thread safe thing in glib/gtk :).
I am intimately familiar with how the glib mainloop works :-) so yes,
I'm aware of this.
> If you want separate threads with tie own main event loops (and, for
> example, their own timeouts) then you can do that, again with any
> thread enter/leave calls (ardour these days runs 3-4 glib event
> loops, for example). If you want other threads to be able to set
> up timeout callbacks in the GUI event loop, then just use
> g_idle_add() to get them set up.
Please bear in mind that LibreOffice using glib/gtk+ exclusively as
it's toolkit / mainloop / cross-platform abstraction is not feasible in
the next many years even if the developer community were enthusiastic
about that; and even if it were a feature-complete replacement (which
I'd like it to be).
LibreOffice is rather a complex piece of software. We integrate well
with eg. Java (of course, also concurrently Mono, python, StarBasic and
more) and we provide a (really naff) component / scripting binding for
our GUI to Java plugins, that API is thread-safe;
Thus it is entirely possible to write a nice Java or StarBasic
component that sits there counting the number of words in a document,
itself generated from a live stream of data, and updating some widget
with the contents. It is fairly normal to see Java components using
threads [ as well as some vast vomit of worker thread / segv handler /
nightmare code arrive when you link the JVM ;-].
While all that madness is going on, the application needs to continue
rendering, and pieces of code that we have no control of - such as the
gtk+ file-selector which does a ton of good asynchronous stuff, need to
continue to work [ie. not SEGV at random, we have enough of that ;-].
So - yes, the solution of:
* simply re-write -all- your code to make everything call
asynchronous / idle handlers on one-of-N glib mainloops
Has the siren of simplicity for gtk+ maintainers to whom adding a
GDK_THREADS_ENTER / LEAVE pair in a few places seems to be a significant
burden :-)
The only problem is, that re-writing the world, from scratch to adapt
to such a toolkit whim takes sufficiently long that by the time we are
done, people will have decided that in fact multi-threaded,
fully-concurrent toolkits are a cool idea, the new "one true way" to
expose wonderful interactive application parallelism ;-) & will have
switched back [ I speculate here of course ].
So - deprecating this is fine by me, discouraging non-competent people
from using it makes lots of sense, but removing the functionality is
going to stop us being able to use gtk+, absent some -really-
substantial re-work impacting our code structure, component model, all
existing components etc. Without resources to do that, I'd really like
you to leave that stuff in - even if it is not perfect & may not be
complete - because I want us to be an application that is able to use
gtk+.
Perhaps we can grab a whiteboard at GUADEC if anything is not fully
clear :-)
Hope that helps,
Michael.
--
michael meeks suse com <><, Pseudo Engineer, itinerant idiot
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]