On Tue, 2007-03-06 at 12:45 -0500, Kevin Lambert wrote:

> I am currently working on a multithreaded application which has a primary
> GUI that is always running and I need to be able to get that GUI to show a
> popup to put images in.  The problem I am having is how do I tell the GUI to
> show the popup from outside of its own code?  
> 
> As a test I connected the "keys-changed" signal for the GUI's window so that
> if that signal gets emitted it launches my dialog.  I then added an external
> function which emits that signal which, when called, crashes the application
> with:
> 
> Xlib: unexpected async reply (sequence 0x995)!
> Xlib: sequence lost (0x108c7 > 0xfd) in reply type 0x8!
> Xlib: sequence lost (0x10000 > 0xfd) in reply type 0x0!
> 
> I do know that only the primary GUI thread is allowed to handle X calls
> which is why I had the signal handler launching my dialog.  I have tried
> googling for information but Im not finding much.
> 
> Thanks,
> 
> Kevin
> 


Kevin,

There several ways to communication between threads, and there are some
design options available which depending on what your doing may not
require you to create a formal thread.   First communications between
threads:

GASyncQueue
    This glib allows api allows you to allocate a structure or pointer,
fill it with the logical message, and post it asynchronously to the
foreground GUI thread for formatting into a displayed message.  This
approch assumes async messages are ok.  If its not1. , create a second
queue, and after posting to display_que have the background thread read
from the done_que - it will sleep until the foreground displays the
message and post the original (or any) pointer to the Done_que.  
    How does the foreground pickup the message.  Start a g_timeout_add()
function to peak at the queue every x seconds, then read  que if peak
counts is more than 0.  Be sure to return true to keep the
g_timeout_add() routine running, otherwise false will make it stop.

Alternates to formal threads.
g_idle_add()
g_io_watch()
g_io_timeout_add()

Hopefully you have the application devhelp and can look up these api's.

James,

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

James Scott, Jr.                                                 
Registered Linux User #270764
FC6 on Dual AMD-MP 2400+
Author: {gfhcm, gkrellfah2,gapcmon,giw}.sourceforge.net
http://mysite.verizon.net/skoona/index.html
_______________________________________________
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