gpt4 book ai didi

c - sigtimedwait 和检测信号

转载 作者:行者123 更新时间:2023-11-30 18:00:55 25 4
gpt4 key购买 nike

我应该实现一个信号处理程序,它在第一次调用某个信号时停止程序中的所有线程,如果它们已经停止则恢复它们。我使用以下代码实现了在后台运行的恶魔线程:

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 以来是否发送了信号?

谢谢

最佳答案

您可能会考虑使处理异步。

例如,通过启动一个线程来“做某事”或“做其他事情”。

关于c - sigtimedwait 和检测信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10122391/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com