取消阻塞' poll '
Cancel blocking `poll`?
所以,我遇到了这个问题,我有许多线程在不同的文件描述符上调用poll。当我想添加一个新的民意调查时,我需要取消其中一个民意调查,添加一个新的,然后继续。这听起来很糟糕,但我甚至不知道该怎么做。
相关代码:
struct pollfd fds[size];
for(int i = 0;i<size;i++) {
struct pollfd fd;
fd.fd = body[i];
fd.events = POLLIN;
fd.revents = 0;
fds[i] = fd;
}
if(poll(&fds[0], (nfds_t)size, -1) < 0) return NULL;
(我也通过JNI使用)。
我想我可以在poll上设置一个非常低的延迟,然后一次又一次地调用它,但我认为这会开始破坏目的。
您可以这样做:打开一个套接字或管道,当有一个新的文件描述符添加到轮询集时,另一个线程发送一些数据。因此,poll将返回,您检查此保留的文件描述符。如果有数据,这意味着有一个新的文件描述符要添加。
您可以向进程发送一个信号,使poll()
返回-1
,并将errno
设置为EINTR
。该信号显然不会导致进程终止,因此您可能需要获得一些sigaction()
或sigprocmask()
。然而,在呼叫它们中的任何一个和poll()
之间接收到的任何信号都可能丢失,类似于select()/pselect()
。由于这个原因,一些系统可能会提供额外的,非标准的poll()
替代品,如ppoll()
,其中包括一个sigset_t
来自动改变信号配置。
相关文章:
- 挂起和取消挂起一个文件DLL
- 如何取消对nullptr的屏蔽,返回正确的对象
- C++取消引用指针.为什么会发生变化
- 使用取消引用的指针的多态性会产生意外的结果.为什么?
- 取消引用运算符不能重载
- 在他自己的方法中,有可能将一个对象取消引用到另一个对象吗
- 如何在Qt中取消捕获字符串
- 如何使用 TStyleManager::UnRegisterStyle() 取消注册样式
- GLEW/GLUT:调用init并创建一个窗口后,取消初始化并重新初始化?
- C++ 关于指针取消引用的技术问题
- 没有取消引用/解包对象的标准方法?
- 列表 iter 不取消引用 使用列表进行插入排序
- C++宏定义和取消定义
- 在这个函数中是有缺陷的,因为取消引用 null 是无效的,所以我想更改代码
- 取消引用结束指针到数组类型的一个
- 取消引用向量时出现问题
- 提升 asio 并发计时器取消问题与链
- 取消引用指向整数的指针时获得不同的结果
- 将继承的结构传递给 poll()
- 取消阻塞' poll '