0
我应该实现一个信号处理程序,它会在第一次调用某个信号时停止程序中的所有线程,如果它们已经停止,则恢复它们。我实现了使用下面的代码在后台运行一个恶魔线程:sigtimedwait和检测信号
void *handle_sig(void *arg)
{
sigset_t set;
//set set...
struct timespec to;
to.tv_sec = 1;
to.tv_nsec = 0;
while (_keepListening) {
int ret = sigtimedwait(&set, NULL, &to);
if (ret < 0)
if (errno == EAGAIN) {
continue; /* no signal sent*/
} else {
fprintf(stderr, "Failed...\n");
exit(1);
}
if (_state == PAUSE_STATE) { /* was blocked*/
//do something
} else {
` //do something else
}
}
return NULL;
}
的问题是,如果一个信号发送和检测,然后又被送到再次进入while循环之前 - 第二个信号忽略,这可能会使程序永远停顿。有没有一种方法来检测自上次调用sigtimedwait以来是否发送了一个信号?
谢谢
信号是一种布尔功能。信号处于活动状态或不处于活动状态,如果在处理第一个信号之前发生两次相同的信号,则不存在计数器或队列。 – 2012-04-12 11:19:06