Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何通过同一进程中的另一个线程使用signal调用休眠在poll函数上的进程而不终止它?_C++_Linux_Signals_File Descriptor - Fatal编程技术网

C++ 如何通过同一进程中的另一个线程使用signal调用休眠在poll函数上的进程而不终止它?

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

我想手动唤醒(同一进程中的另一个线程)一个在poll()函数上休眠的线程,等待任何可用的输入数据。看起来我通过发送信号找到了一个可能的解决方案,但我真的没有这方面的经验。在这个页面上,我调用了一个名为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]);
     ...
}

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.谢谢。我还没想过呢,也读一下。考虑使用,