C++ 如何通过同一进程中的另一个线程使用signal调用休眠在poll函数上的进程而不终止它?
我想手动唤醒(同一进程中的另一个线程)一个在poll()函数上休眠的线程,等待任何可用的输入数据。看起来我通过发送信号找到了一个可能的解决方案,但我真的没有这方面的经验。在这个页面上,我调用了一个名为SIGPOLL的信号,代码为POLL_IN,POLL_MSG,但是当我调用它时,整个过程都被终止了。 如何在不中断整个进程的情况下发送此信号?我使用pipe()来解决此问题C++ 如何通过同一进程中的另一个线程使用signal调用休眠在poll函数上的进程而不终止它?,c++,linux,signals,file-descriptor,C++,Linux,Signals,File Descriptor,我想手动唤醒(同一进程中的另一个线程)一个在poll()函数上休眠的线程,等待任何可用的输入数据。看起来我通过发送信号找到了一个可能的解决方案,但我真的没有这方面的经验。在这个页面上,我调用了一个名为SIGPOLL的信号,代码为POLL_IN,POLL_MSG,但是当我调用它时,整个过程都被终止了。 如何在不中断整个进程的情况下发送此信号?我使用pipe()来解决此问题 void a(int invokefd){ ... write(invokefd, "c&quo
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]);
...
}
void a(int invokefd){
...
写入(调用EFD,“c”,1);
...
}
无效b(int invokefd){
向量读取;
...
pollfd-invfd;
invfd.fd=invokefd;
invfd.events=POLLIN;
invfd.revents=0;
readfds.推回(invfd);
...
轮询(&readfds[0],readfds.size(),-1);
...
}
void main(){
...
int-invokedfs[2];
管道(EFDS);
线程aTh(a,invokefds[1]);
线程bTh(b,invokefds[0]);
...
}
如果您要与之通信的线程已在进行轮询,为什么不使用a与之通信?@G.M.谢谢。我还没想过呢,也读一下。考虑使用,