Re: Multi-threaded Text Insertion into a TextView
- From: "Brian J. Tarricone" <bjt23 cornell edu>
- To: gtk-app-devel-list gnome org
- Subject: Re: Multi-threaded Text Insertion into a TextView
- Date: Tue, 09 Nov 2004 21:59:25 -0800
DESCOMBES Thierry wrote:
Hello,
I have several POSIX threads trying to insert text into a Textview. So,
I've used a POSIX mutex to be sure that they are inserting text into the
TextBuffer one after the other.
 
[snip]
ugh... well, gtk and threading isn't all that fun.  what you need to do 
is, at the beginning of your main(), right before you call gtk_init(), 
call g_thread_init(NULL) and gdk_threads_init().  then, surround your 
call to gtk_main() with:
gdk_threads_enter();
/* actually, you probably want to put your thread creation stuff in here 
too. */
gtk_main();
gdk_threads_leave();
then, in any thread but the main thread, whenever you call _any_ gtk or 
gdk function, surround that code block with 
gdk_threads_enter()/gdk_threads_leave().  also do this for any functions 
that are invoked via g_idle_add() or g_timeout_add().
your other (and somewhat better, IMHO) option is to not do any of the 
stuff i just mentioned, and use a GAsyncQueue to communicate between the 
other threads and the main thread.  the main thread can do the actual 
adding of the text to the textview widget.  if you use this method, you 
aren't allowed to call any gtk or gdk functions from anything but the 
main thread (well, there are possibly a few that are ok, but better safe 
than sorry).
of course, you're using gtkmm, so you'd want to use the C++ equivalents 
to these functions/objects.
there are probably several resources on the web regarding gtk and 
multithreaded apps; i suggest you find and read them.
   -brian
[
Date Prev][
Date Next]   [
Thread Prev][
Thread Next]   
[
Thread Index]
[
Date Index]
[
Author Index]