如何在不杀死它的情况下调用同一进程中另一个线程在 poll 函数上休眠的进程?
How to invoke a process sleeping on poll function by another thread in the same process with signal without killing it?
我想手动唤醒(由同一进程中的另一个线程)休眠在 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]);
...
}
我想手动唤醒(由同一进程中的另一个线程)休眠在 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]);
...
}