Hi James,

I really appreciated to read your experiences. Thanks for sharing them!

JAMES SCOTT wrote:
> This response may be a little off topic.  But as I have followed this thread 
> I understand your are moving some application to linux from MS.  Moreso, you 
> are planning on using gtk to get that port done.  Here is a little of my 
> experience with gtk threaded program design.

In fact I am currently evaluating the way I have to go when doing my
port. I currently see three options:
 - using the Free Pascal Compiler together with Lazarus (the original
program is written in Delphi)
 - using the g++ compiler together with QT
 - using the g++ compiler together with GLib/Gtk or GLibmm/Gtkmm

At the moment the last option seems to be the most attractive one. But I
will not make the decision alone, instead my task is to make a solid
proposal and show it to the rest of our developers.

>    1. having gtk thread security features turned on is required if you
>       plan to call gtk_ api's from more than one thread: Which you
>       should NOT try to do.
> [...]

Yes, indeed I plan to use only the main thread for GUI stuff. That fits
well with the program design I'm usually using.

>    2. Spend some time devising a way to collect data values that need to
>       be visually represented in gtk inside a container or memory
>       structure that you can g_new0() allocate. 
>          1. Then pass that pointer from the background thread to the
>             foreground GTK main thread for display or updating
>                1. maybe using GAsyncQueue to pass the pointers
> [...]
>
>    3. For gtk main thread to background thread interchanges look over
>       the g_idle/g_timeout set of apis and potentially
>       g_io_channel/watch apis; along with  g_mutex 'es where needed.
> [...]

I think that this can be a good substitute for the
SendMessage/PostMessage functions I used.

>    4. If you look at how gtk suggest you setup for multi-threaded
>       program, it describes wrapping the call to gtk_main() with (
>       gdk_threads_enter(); gtk_init();
>       gtk_window...;gtk_main();gtk_threads_exit() ).  What is not so
>       obvious is that this protects most callback except for
>       g_timeout... g_thread... based functions;  as those callbacks
>       occur inside the current gtk_main loop.
>          1. You need to consider using gdk_threads_enter/exit in any
>             g_timeout/g_thread/g_io_ based routine
>          2. if you follow me thus far, then you will never call a
>             gtk/gdk routine from outside the gtk_main loop or thread;
>             except for maybe g_io_watch based functions.

I'm not sure if have understood this but as described above I will try
to follow 4.2 here :-)

>    5. Socket based, and other OTHER PROCESS, communication wheter a pipe
>       or a socket or orther mechanism may lend itself to g_io_channel
>       and g_io_watch based apis.
> [...]

Yes, most probably I will add private instances to some threads with
g_main_loop_new()/g_main_context_new().

>    6. Finally, be careful how you implement or use classic unix
>       signals:  Danger, Danger Will Robinson..

Is it possible to work with signals if they are only handled by the main
thread? Anyway I'm not sure if I will need signals at all...

> I can not stress enough that you need to buy the book, readit, and
> workout some off-project tests before pounding out a ported
> application.  You will find gtk/glib to have a rich set of widgets and
> programming constructs that make using it almost fun.

Of course I will start with some small concept evaluations before doing
the whole port. What do you mean with "the book"? Which book(s) would
you recommend for Gtk/GLib or even Gtkmm/GLibmm programming?

> I hope some of what I've said help your quest.

Your comments helped me a lot. Thanks again!

/Tobias

-- 
NOA Audio Solutions Vertriebsges .m.b.H.   Tel: +43-1-5452700
Johannagasse 42/4                          Fax: +43-1-545270014
A - 1050 Wien                              Www: http://www.noa-audio.com




_______________________________________________
gtk-app-devel-list mailing list
gtk-app-devel-list@gnome.org
http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list

Reply via email to