The actual sigchld_handler() routine can do whatever it needs to do, including call Xlib routines, since it is
only called when it is safe to do so. You should note that XNextEvent() waits until it reads an event from the X
server before it returns, so handling the signal may take a long time if the program is waiting for the user to do
something.
These code fragments demonstrate the general design for handling signals in a rudimentary way. In a real application,
the actual signal handler would probably need access to all of the parameters passed to the original signal handling
function. One example of this situation would be a signal handler that displays the values of all its parameters in a
dialog box. You can't change anything on the display using the original signal handler because it would require
making Xlib calls, so you have to save the parameters until the real signal handler is called. To save the parameters,
you could define a data structure that contains fields for all of the parameters. The original signal handler could
allocate a new structure and fill it in each time a signal is delivered. As we will discuss later, there can also be
problems with memory allocation in a signal handler. When the real signal handler is called, it can access the data
structure and create a dialog using the appropriate Xlib calls.
21.2 Handling Signals in Xt
Since this is a book on Motif and Motif is based on Xt, the next step is to find a solution that is appropriate for ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month, and much more.