|laziness, impatience, and hubris|
Communication between threadsby crenz (Priest)
|on May 02, 2004 at 19:03 UTC||Need Help??|
crenz has asked for the
wisdom of the Perl Monks concerning the following question:
I have problems coming up with a good solution for one thread sending "messages" to another thread. Here's the problem:
A subthread of my program listens on an UDP socket and receives messages. These messages are evaluated and a hash containing parameter values is updated. This hash is marked as shared between threads. The main program displays a wxPerl GUI, including some function plots (drawn using the shared parameter hash). It runs the wxPerl main message loop.
Here's the problem: How can the subthread tell the main thread to redraw the function plots?
The solution I came up with is to define a signal handler in the main thread that implements the GUI updates, then use kill 'SIGUSR1', $$; in the subthread.
The problem with this solution is that the signal is only handled once I activate the application. Ie., when running another application in the foreground, the UDP messages will be received and the signal is sent, but the signal will only be handled after I click on the application's main window. This is unsatisfactory, as I want the function display to be updated immediately.
Is there a way I can work around this problem, or is there a more elegant solution? Thanks for your help!
Edit: I should mention I'm running this on Mac OS X 10.3.3.