Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我应该什么时候使用zmq_msg_t?_C++_Zeromq - Fatal编程技术网

C++ 我应该什么时候使用zmq_msg_t?

C++ 我应该什么时候使用zmq_msg_t?,c++,zeromq,C++,Zeromq,发送和接收消息的功能如下: int zmq_send (void *socket, void *buf, size_t len, int flags); int zmq_recv (void *socket, void *buf, size_t len, int flags); 但是,从文档中不清楚何时必须直接使用zmq\u msg\u t或自定义数据。因此,在这种情况下,我应该考虑使用 ZMQJ.MSGYT< ,在这种情况下直接发送我的数据? 在如何设置、加载/卸载和使用/销毁支持的底层数据

发送和接收消息的功能如下:

int zmq_send (void *socket, void *buf, size_t len, int flags);
int zmq_recv (void *socket, void *buf, size_t len, int flags);
但是,从文档中不清楚何时必须直接使用
zmq\u msg\u t
或自定义数据。因此,在这种情况下,我应该考虑使用<代码> ZMQJ.MSGYT< <代码>,在这种情况下直接发送我的数据? 在如何设置、加载/卸载和使用/销毁支持的底层数据结构方面要相当小心,这些底层数据结构是强大而酷的
ZeroMQ
-库服务所依赖的

否则,最好使用高级伴随函数

Return value:
              zmq_msg_close() function shall return zero if successful.
                              Otherwise it shall return -1 and
                              set errno to one of the values defined below.
Errors
              EFAULT          Invalid message.

毫不犹豫地读这本书——值得一读 Pieter HINTJENS在第42页第4项中建议:

要释放(而不是销毁)消息,请调用
zmq\u msg\u close()
。这会删除一个引用,最终0MQ将销毁该消息

在这方面,您可能会发现更为谨慎:

The zmq_msg_close() function shall inform the ØMQ infrastructure
that any resources associated with the message object
referenced by msg are no longer required and may be released.

Actual release of resources associated with the message object
shall be postponed by ØMQ until all users of the message or underlying
data buffer have indicated it is no longer required.

Applications should ensure that zmq_msg_close() is called
once a message is no longer required, otherwise memory leaks may occur.
切勿直接访问
zmq\u msg\u t
成员,而应始终使用
zmq\u msg
函数系列

Return value:
              zmq_msg_close() function shall return zero if successful.
                              Otherwise it shall return -1 and
                              set errno to one of the values defined below.
Errors
              EFAULT          Invalid message.

这两个函数都将在内部构造一个
zmq\u msg\u t
,然后使用函数的
zmq\u msg\u t
变体。这很方便,但如果您想多次发送同一消息,则创建
zmq\u msg\u t
并使用这些变体将更高效(更少复制)。

是的,如果对一次初始化的结构进行了大量重复使用,则有理由这样做。[+1对David]这很奇怪,因为如果我不使用
zmq_msg_t
通过
zmq_send
发送消息,那么在接收端点上我就不会得到
zmq_msg_t
的内部数据结构。如果使用它,我在开始时会得到16字节的内部数据,这对我的接收应用程序来说是无用的。您试图发送的数据是如何格式化的?(什么数据类型等?)。