Re: Non-Blocking GUI developement

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

 



Hi,

To answer your questions first:

1) updating the GUI with the 2 lines of code you indicated is correct.

2) you say, though, that the exit button is still not responsive; was  
this with a single-threaded or multi-threaded version?  if it was  
single-threaded, then the reason is because there is only one gtk_main 
() and it can only do one thing at time.  If you do work in the  
background in a single thread, there's no possibility for the user to  
interact with it, it's busy.

Converting this to multi-threaded to achieve what you want is the way  
to go:

1) You can avoid the types of crashes you spoke of in a multi- 
threaded gui by sticking to the following guidelines:

1.1) do no gtk_...() calls in your background/server thread, it  
should be responsible only for the background processing you require.

1.2) do all gtk_...() calls within the single thread where gtk_main()  
has been invoked.

1.3) when any background thread needs to communicate with the user  
(i.e., the GUI), make a call to gtk_idle_add() specifying a function  
responsible for communicating the background thread's info back to  
the GUI for display.  gtk_idle_add() is threadable without problems  
and will place the function to be called onto the mainloop queue for  
next processing.

2) using pthread vs. glib's implementation:  I use glib's version,  
but miss one function, it seems there is no glib equivalent to  
pthread_kill(), and sometimes you might need it.  but there are ways  
around it, in any case.  i have no strong opinion here, perhaps  
someone else can provide more information.

other than that you should be fine.

richard

On Jan 24, 2007, at 3:27 PM, Melvin Newman wrote:

> First off I am a noob with GTK+.
>
> Basically I am writing a program that is to interface with a server  
> program over a network. As such this client program has effectively  
> 2 parts, 1) the backend code that connects to the server and  
> handles all the data communications, 2) the front end GUI that  
> presents the code to the user.
>
> The problem that I am running into is that I cant get the gui to  
> update in a timely manner (a problem that allot of us GTK noobs  
> seem to have, but one which no one answers clearly). I have tried  
> the following at key places in my code:
>
> while(gtk_events_pending())
>         gtk_main_iteration();
>
> And while this does update the gui, the user still has no control  
> over it. For example if the user select file->exit, the menu drops  
> down but the exit button has no effect. Can GTK+ run multiple  
> signal handlers concurrently?
>
> In my first write of this program I used pthreads however I did it  
> in a very very unsafe manner and the client program would  
> frequently crash because both gtk_main() and my thread where doing  
> gui operations.
>
> My main question therefore is, how do I write a responsive gui that  
> can communicate in  real time over the backend networking code? Is  
> pthread the way to go? If so, how do I guarantee that the pthread  
> code will work on a single processor/core machine? My last pthread  
> code ran ok on my dual proc desktop, but died on my single proc  
> laptop.
>
> Thank you very much for any help you can provide this noob.
>
> Sincerely
> Melvin
> _______________________________________________
> gtk-list mailing list
> gtk-list@xxxxxxxxx
> http://mail.gnome.org/mailman/listinfo/gtk-list

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

[Index of Archives]     [Touch Screen Library]     [GIMP Users]     [Gnome]     [KDE]     [Yosemite News]     [Steve's Art]

  Powered by Linux