微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用信号调用同一进程中的另一个线程在轮询函数上休眠的进程而不杀死它?

如何解决如何使用信号调用同一进程中的另一个线程在轮询函数上休眠的进程而不杀死它?

我想手动唤醒(由同一进程中的另一个线程)在 poll() 函数上休眠的线程等待任何可用的输入数据。看起来我通过发送信号找到了一个可能的解决方案,但我真的没有任何经验。在这页面上我found一个叫做SIGPOLL的信号,代码像POLL_IN,POLL_MSG,但是当我调用它时,整个过程都被杀死了。 如何在不杀死整个进程的情况下发送此信号?

解决方法

我使用 pipe() 来解决这个问题。

void a(int invokefd){
     ...
     write(invokefd,"c",1);
     ...
}

void b(int invokefd){
     vector<pollfd> readfds;
     ...
     pollfd invfd;
     invfd.fd = invokefd;
     invfd.events = POLLIN;
     invfd.revents = 0;
     readfds.push_back(invfd);
     ...
     poll(&readfds[0],readfds.size(),-1);
     ...
}

void main(){
     ...
     int invokedfs[2];
     pipe(invokefds);
     thread aTh(a,invokefds[1]);
     thread bTh(b,invokefds[0]);
     ...
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。