从标准输入读取时zmq_poll不侦听信号
zmq_poll not listening on signal when reading from stdin
我正在我的C++应用程序中使用对Linux 上的zmq_poll
调用,从控制台输入读取进行轮询。现在我没有使用任何 ZeroMQ 套接字,但我会在下一个将来使用。
根据我的理解zmq_poll
只有在 Linux 上才能使用 linux 文件描述符,包括STDIN_FILENO
.
我希望下面的代码在向我的应用程序发送 CTRL-C 时返回一个EINTR
。
当我调试它时,我可以看到它一直等到超时结束,它返回res_num=0
.
zmq_pollitem_t* mpPollItems = new zmq_pollitem_t[1];
std::memset(mpPollItems,0,sizeof(zmq_pollitem_t));
mpPollItems[0].socket = NULL;
mpPollItems[0].fd = STDIN_FILENO;
mpPollItems[0].events = ZMQ_POLLIN;
// Poll for events some milliseconds
int res_num = zmq_poll (mpPollItems, 1, 10000);
zmq_poll
正在幕后使用Linux"民意调查"。
我是否对这段代码做错了什么,或者我误解了zmq_poll
的工作方式?
会不会与信号屏蔽有关?
注意:我在从主线程生成的单独线程中调用zmq_poll。 我直接使用"民意调查"进行了测试,并得到了相同的结果。只有在主线程中调用"poll"时,我才能看到传递的信号;如果在单独的线程上调用它,则没有反应。
最近的 ZeroMQ API 扩展带来了一些"肮脏"的技巧,超出了最初的Zen-of-ZERO。
是的,在ZMQ_STREAM
可扩展的正式通信模式原型下扩展使用O/S本机TCP对等体成为可能,但是这些步骤开始出现不一致的期望与s现实传递的问题。
本机 O/S 文件描述符可能会被强制注入到zmq_pollitems_t
struct
的.fd
项中,但EINTR
信号在传播的 O/S 信号时为 ZeroMQ-Socket()
实例引发,这似乎与仅"注入"轮询的工作方式不同。
如果相同的差异仍然存在,则"完整"设置(使用完全配置和设置ZMQ_STREAM
-Socket()
-实例,而不仅仅是临时的,.fd
-"注入"的技巧)轮询,最好为软件包维护者提出更改请求,以便将处理重构回两种类型的轮询设备的 Zen-of-Zero 统一模式。
- Qt VTK交互风格的信号到小部件
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- 如何在没有信号的情况下从C++执行QML插槽
- 线程之间的布尔停止信号
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- 当用户在qtablewidget中输入单元格时,如何获得信号?C++
- 有可能在信号处理程序中设置promise吗
- 代码在我的计算机上运行良好,但是在将其提交给coursera时遇到未知的信号11问题
- 在条件变量中触发错误信号的频率是多少
- 在信号处理程序中捕获C++未处理的异常并恢复应用程序
- 调试和自由执行中的信号处理
- 升压信号2将插槽传递到成员功能以断开连接
- C++函数包装器来捕获某些信号
- 如何在qt中将信号和插槽与另一个对象连接 --解决了
- 中止信号来自 C++ 中的中止(3) (SIGABRT)
- Qt将信号与另一个类方法连接
- C++ 信号和插槽不工作:插槽不响应事件
- Coursera :自动评分器的未知信号 11
- 阻塞信号会导致升压过程不起作用