如何在C++和ZMQ中正确使用多线程

  • 本文关键字:多线程 ZMQ C++ c++ zeromq
  • 更新时间 :
  • 英文 :


我正在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);

如果需要发送数据,请使用PUBPUSH或其他套接字类型,但SUB无法与send()一起使用;它将抛出CCD_ 6。

最新更新