如何在C++和ZMQ中正确使用多线程
How do I use correctly multi threads in C++ and ZMQ
我正在C++中的核心模块之间进行一些消息传递,该模块必须与Python模块和图形接口通信
我正在以以下方式使用ZMQ进行消息传递:
int main()
{
context_t context(1);
socket_t publisher(context, ZMQ_PUB);
publisher.bind("tcp://127.0.0.1:50000");
//This sockets takes charge of the python publishing
socket_t send_py(context, ZMQ_SUB);
send_py.bind("tcp://127.0.0.1:5557");
socket_t receive_py(context, ZMQ_SUB);
receive_py.connect("tcp://127.0.0.1:5558");
receive_py.setsockopt(ZMQ_SUBSCRIBE, NULL, 0);
zmq::message_t control_signal(sizeof(float));
zmq::message_t control_signal_second(sizeof(float));
cout<<"flag"<<endl;
publisher.send(control_signal);
cout<<"flag_1"<<endl;
send_py.send(control_signal_second);
cout<<"flag_2"<<endl
}
我已经考虑过地址了,我确信港口是开放的。
代码编译了,但我得到了以下输出:
flag
flag_1
terminate called after throwing an instance of 'zmq::error_t'
what(): Operation not supported
Aborted (core dumped)
正在正确发布其中一个,但不允许send_pyu.send工作。
非常感谢
您似乎已将send_py
定义为订阅者:
socket_t send_py(context, ZMQ_SUB);
send_py.bind("tcp://127.0.0.1:5557");
但您试图在上面发送数据,这是无效的,不受支持;订阅者接收,他们不发送数据。
send_py.send(control_signal_second);
如果需要发送数据,请使用PUB
、PUSH
或其他套接字类型,但SUB
无法与send()
一起使用;它将抛出CCD_ 6。
相关文章:
- 在C++中使用cURL和多线程
- 多线程双缓冲区
- 为什么我的多线程作业队列崩溃
- 在main()之外初始化std::vector会导致性能下降(多线程)
- 试图创建一个多线程程序来查找0-100000000之间的总素数
- 为什么一个向量上的多线程操作很慢
- 学习多线程C++:添加线程不会使执行速度更快,即使它看起来应该
- 全局变量 多读取器 一个写入器多线程安全?
- boost::文件系统::recursive_directory_iterator多线程安全
- 如何阻止TensorFlow的多线程
- 如何在多线程中正确使用unique_ptr进行多态性?
- 并发/多线程:是否可以以这种方式生成相同的输出?
- sigwait() 在多线程程序中不起作用
- 多线程程序中出现意外的内存泄漏
- 静态 constexpr 类成员变量对多线程读取是否安全?
- 多线程比没有线程C++慢
- 具有 C++11 多线程的特征库
- 如何在C++和ZMQ中正确使用多线程
- 以某种方式在ZMQ中同时使用Send/Recv是可能的(通过多线程)
- 使用zmq进行多线程发布