我怎么能打断一个无限的等待呢?
How can I interrupt an infinite sigtimedwait?
我的程序有一个由epoll
(用于I/O)和条件变量(用于其他消息活动)约束的事件循环,以及负责捕获信号的工作线程(SIGINT
, SIGTERM
, SIGHUP
)。SIGINT
、SIGTERM
、SIGHUP
、SIGPIPE
在其他线程中被阻塞
我的epoll_wait
调用有500ms超时,但我试图减少上下文切换并使用无限的epoll_wait
代替,当主线程决定是时候退出程序和事件循环应该停止时,由管道活动唤醒。
同样,我的sigtimedwait
调用有500ms超时(并在每次调用后检查std::atomic<bool>
,看看它是否需要停止),我想用不需要保持清醒来检查中断的东西来替换它。
我可以从主线程向信号观察线程发出一个信号来实现这个,或者类似的东西吗?或者在这个时代有没有更好的方法来捕捉信号?
这是在CentOS 6和7上(尽管首选通用的POSIX解决方案—
使用信号文件描述符,而不是信号处理程序。
代替信号处理程序,信号的接收现在将通过读取文件描述符来完成,该描述符是可poll的,并且可以作为epoll集的一部分进行处理。
是的,在当今时代,这是在Linux上捕获信号的更好方法。
相关文章:
- visual是否可以在c++中创建一个接收无限数量相同类型(或至少相当数量)参数的函数
- Qt 在另一个线程中无限循环
- 为什么这个递归函数会创建一个无限循环?
- 如何找出为什么我的程序一直有一个无限循环?
- 只有一个正确解决方案的无限循环
- 为什么我有一个无限循环,我如何以不同的方式做到这一点
- WinUsb_WritePipe进入了一个无限循环
- 为什么我会得到一个无限循环(因子)?
- 为什么我总是得到一个无限循环
- 为什么这个程序不表现 LIke 一个无限的输入行 - c++
- 在无限循环C 内定义一个变量
- 是一个未删除的无限,而循环不良练习
- 我得到一个无限的循环,我不确定为什么或如何修复它
- 一个关于应用指针的问题,它使循环无限
- 我写了一个函数来删除循环链接列表中的第 1 个节点,但输出显示无限次"55 44 33 22 11 99",那么我该如何解决呢?
- 无限输入C 计算器要结束计算,需要再进行一个INT
- 无限数组C++在一个表达式中使用两个新值调整数组大小
- 这是一个无限循环吗?程序提前完成
- 为什么它是一个无限循环?
- 为什么我的程序在输入字符时有一个无限循环