繁体   English   中英

通过 ZMQ 发送数据包的问题

[英]Issue with sending packet via ZMQ

我有以下 C++ 代码,它将 10 个字节的 zmq 数据包发送到 GNU Radio Companion 中的 ZMQ Pull Source。

#include <iostream>
#include <zmq.h>

using namespace std;

int main() 
{
    void *send_context, *responder;
    unsigned short gnu_trigger[10];
    string trig_addr = "tcp://127.0.0.1:4500";
    int rc;

    /* Bind ZMQ address for transmitting data */
    send_context = zmq_ctx_new();
    responder = zmq_socket(send_context, ZMQ_PUSH);
    rc = zmq_bind(responder, trig_addr.c_str());
    
    while(1)
    {
        cout << "Sending trigger to gnuradio\n";
    
        memset(gnu_trigger, 0x0, sizeof(unsigned short) * 10);
        gnu_trigger[0] = 1;
        
        rc = zmq_send(responder, &gnu_trigger, sizeof(gnu_trigger), 0);
    
        cout << "Sent trigger to gnuradio\n";
        sleep(1);
    }

    zmq_close(responder);
    zmq_ctx_destroy(send_context);
    
    return 0;
}

如果我在发送 ZMQ 数据包之前和之后删除/注释 cout 语句,则不会传输数据包。 但是,如果启用了 cout 语句,则可以成功发送数据包。

为什么会这样?

Zmq 是异步的,因此当您调用zmq_send时不会发送消息,而是在将来的某个时间点发送。 由于您的程序在调用zmq_send后立即结束,zmq 没有时间发送消息。

添加 print 语句会使您的程序变慢,足以让 zmq 有时间发送消息。

您应该在退出程序之前调用zmq_closezmq_term

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM