首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我什么时候应该使用zmq_msg_t?

问我什么时候应该使用zmq_msg_t?
EN

Stack Overflow用户
提问于 2016-05-23 19:33:35
回答 2查看 2.9K关注 0票数 3

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

代码语言:javascript
复制
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_msg_t或自定义数据。那么在哪些情况下我应该考虑使用zmq_msg_t,在这种情况下直接发送数据呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-23 21:06:07

这两个函数都将在内部构造一个zmq_msg_t,然后使用函数的zmq_msg_t变体。这很方便,但是如果您想要多次发送相同的消息,那么创建一个zmq_msg_t并使用这些变体会更有效(减少复制)。

票数 2
EN

Stack Overflow用户

发布于 2016-05-23 20:58:04

永不TLDR

在如何设置、加载/卸载以及使用/销毁支持的低级别数据结构方面要相当小心,这些支持是凉爽而强大的ZeroMQ-library服务所依赖的。

否则,最好还是使用高级的伴生函数。

不要犹豫去读这本书--值得花些时间

Pieter在第42页第4项中建议:

若要发布(而不是销毁)消息,请调用zmq_msg_close().这将删除一个引用,最终0MQ将销毁该消息。

在API文档中,您可能会发现更强烈的警告:

代码语言:javascript
复制
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_msg_t 从不直接访问成员,总是使用zmq_msg系列函数。

代码语言:javascript
复制
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.
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37399101

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档