http://www.perlmonks.org?node_id=349847

crenz has asked for the wisdom of the Perl Monks concerning the following question:

Fellow monks,

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.