ZBLOG

3.1.2.2.1. DataSharingQosPolicy This additional QoS allows configuring the data-sharing delivery communication between a writer and a reader. Please, see Data-sharing delivery for a description of the data-sharing delivery functionality. List of...

DataSharingQosPolicy

DataSharingQosPolicy 是一个额外的QoS(质量服务)策略,用于配置数据共享交付通信方式,主要用于 Writer 和 Reader 之间的数据传输。此策略可以有效地支持在多个进程或线程之间共享数据。

QoS 策略数据成员列表:

数据成员 类型 访问器 默认值
数据共享种类 DataSharingKind kind() AUTO
共享内存目录 string shm_directory() 空字符串
最大域数量 uint32_t max_domains() 0 (无限)
数据共享域ID vector domain_ids()
数据共享监听线程设置 ThreadSettings data_sharing_listener_thread()

数据共享种类说明:

  • Data-sharing kind:指定数据共享交付的行为。具体描述请参考 DataSharingKind
  • Shared memory directory:用于内存映射文件的目录。如果未配置,则使用系统默认目录。
  • Maximum domain number:规定本地或远程端点中最大的数据共享域ID数量。如果该值低于任何远程端点ID列表的大小,则匹配可能会失败。值为零表示无限制。
  • Data-sharing domain IDs:为当前 DataWriterDataReader 配置的数据共享域ID列表。如果未提供ID,系统将为当前机器创建一个唯一ID。
  • Data-sharing listener thread settings:用于监听入站流量的数据共享线程的设置。

注意事项:

此QoS策略适用于 DataWriterDataReader 实体,并且不能在启用实体上更改。

DataSharingKind

有三个可能的值(参见 DataSharingKind):

  • OFF:禁用数据共享交付,不会执行任何通过数据共享功能进行的通信。
  • ON:手动启用数据共享交付。如果当前主题不兼容,将产生错误;与至少一个共同数据分享域ID的远程实体之间将通过数据分享功能进行通信。
  • AUTO:如果当前主题兼容,将激活数据分享;否则,将被停用。

数据共享配置助手函数

为了设置数据共享交付配置,必须使用以下辅助成员函数之一,每个函数对应一种 DataSharingKind 风格:

函数 导致的数据分享种类
automatic() AUTO
on() ON
off() OFF

您可以在这些助手函数中定义数据共享域ID,也可以使用 add_domain_id() 函数稍后添加。请注意,添加新域ID算作修改QoS策略,因此必须在启用实体之前完成。

示例

以下是如何配置和使用 DataSharingQosPolicy 的示例代码:

// 此示例使用 DataWriter,但也可应用于 DataReader 实体
DataWriterQos writer_qos;

// 默认情况下,DataSharing 设置为 AUTO,这意味着如果主题兼容,将使用 DataSharing。
// 如果未指定 Shared Memory 目录,则将使用默认目录。

// 配置 DataSharing 为 ON,以启用并指定必需的 shared memory 目录
writer_qos.data_sharing().on("/path/to/shared_memory/directory");

// 或者,配置 DataSharing 为 OFF 来禁用它
writer_qos.data_sharing().off();

// 将 DataSharing 配置为 AUTO,并添加两个用户定义的 ID(也可与 ON 一起使用)
std::vector<uint16_t> ids;
ids.push_back(0x1234);
ids.push_back(0xABCD);
writer_qos.data_sharing().automatic(ids);

// 或逐个添加 ID
writer_qos.data_sharing().add_domain_id(uint16_t(0x1234));
writer_qos.data_sharing().add_domain_id(uint16_t(0xABCD));

// 或者可以保持 ID 列表为空,系统会自动创建一个唯一 ID

// 设置最大域数为5. 设置为0表示'无限'
writer_qos.data_sharing().set_max_domains(5);

// [可选] 听线程的 ThreadSettings 设置
writer_qos.data_sharing().data_sharing_listener_thread(eprosima::fastdds::rtps::ThreadSettings{-1, 0, 0, -1});

// 使用修改后的 QoS 创建相应实体
writer_ = publisher_->create_datawriter(topic_, writer_qos);

这段代码展示了如何通过各种方式配置和应用 DataSharingQosPolicy


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:http://sdn.0voice.com/?id=7809

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?