Approach the problem this way: the event just means, “you should not be asleep right now.”   (Not “please wake up.”) The main-loop of the thread is driven by a set of shared flags which tell it what it should do next, one of the choices being “die now.”
while (1) {
if (shared.die) {
exit;
}
elsif (shared.do_this) {
do_this;
}
elsif (shared.do_that) {
do_that;
}
...
else {
wait_for_event();
}
}
The parent thread first sets one of the flags, then strobes the event to be sure that the child is not-asleep to respond to it.
You don’t need to invent these things from scratch. Look at existing workhorses such as POE.
|