我应该实现一个信号处理程序,它在第一次调用某个信号时停止程序中的所有线程,如果它们已经停止则恢复它们。我使用以下代码实现了在后台运行的恶魔线程:
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后是否发送了一个信号?
谢谢
答案 0 :(得分:0)
您可能会考虑使处理异步。
例如,通过启动“做某事”或“做其他事情”的线程。