On Sun, Aug 22, 2004 at 11:24:51PM +0200, Enrico Zini wrote:
> Almost there. I wrote code to create a pipe and set it in nonblocking
> mode, to avoid the signal handler to block if the Gtk main loop has
> something else to do and isn't reading from the pipe.
> Now I'd like to add reading the pipe in the Gtk event loop, but:
I reply myself, as I solved the problem: while desperately looking at
the Gtkmm namespace in search for some clue, I stumbled on the
Glib::Dispatcher class, which does exactly what I want: you call its
emit() method anywhere and it activates a slot in the correct place in
the Glib event loop. Or at least this is what I understood.
Anyway, for the records, I now have this very nice thing:
static Glib::Dispatcher dispatcher;
static void termination_handler(int signum)
{
dispatcher.emit();
}
// later on...
// Connect the dispatcher to the child exit signal
dispatcher.connect(signal_child_exit());
// Setup the SIGCHLD handler
struct sigaction new_action;
new_action.sa_handler = termination_handler;
sigemptyset(&new_action.sa_mask);
new_action.sa_flags = SA_NOCLDSTOP; //0;
sigaction(SIGCHLD, &new_action, NULL);
So far, it works nicely!
Ciao,
Enrico
--
GPG key: 1024D/797EBFAB 2000-12-05 Enrico Zini <enrico debian org>
Attachment:
signature.asc
Description: Digital signature