ZBLOG

3.1.2.2.11. RTPSEndpointQos This QoS Policy configures the aspects of an RTPS endpoint, such as the list of locators, the identifiers, and the history memory policy. See RTPSEndpointQos. List of QoS Policy data members: Data Member Name Type ...

RTPSEndpointQos 解释

RTPSEndpointQos 是一个用于配置 RTPS(Real-Time Publish-Subscribe)端点的 QoS(Quality of Service)策略。该策略涉及诸如定位器列表、标识符以及历史内存管理策略等方面。

QoS 策略数据成员列表

以下是 RTPSEndpointQos 中的主要数据成员及其说明:

  1. unicast_locator_list:

    • 类型:LocatorList
    • 默认值:空列表
    • 描述:定义与 DDS 实体相关联的单播定位器列表。DataReaders 和 DataWriters 默认继承 DomainParticipant 中设置的单播定位器列表,但可以通过此 QoS 进行更改。
  2. multicast_locator_list:

    • 类型:LocatorList
    • 默认值:空列表
    • 描述:存储与 DDS 实体相关联的多播定位器列表。默认情况下,DataReaders 和 DataWriters 不使用任何多播定位器,但可以通过此 QoS 进行更改。
  3. remote_locator_list:

    • 类型:LocatorList
    • 默认值:空列表
    • 描述:状态表示与 DDS 实体相关联的远程定位器列表。
  4. external_unicast_locators:

    • 类型:ExternalLocators
    • 默认值:空
    • 描述:定义为与该 DDS 实体进行通信而宣布的外部定位器。
  5. ignore_non_matching_locators:

    • 类型:bool
    • 默认值:false
    • 描述:定义是否忽略来自其他 DDS 实体的公告中不匹配本 DDS 实体宣布的任何定位器。
  6. user_defined_id:

    • 类型:int16_t
    • 默认值:-1
    • 描述:建立用于静态端点发现的唯一标识符。
  7. entity_id:

    • 类型:int16_t
    • 默认值:-1
    • 描述:用户可以为端点指定标识符。
  8. history_memory_policy:

    • 类型: MemoryManagementPolicy
    • 描述: 表示在处理 CacheChanges 时内存管理方式。默认设置为 PREALLOCATED_WITH_REALLOC_MEMORY_MODE.

MemoryManagementPolicy 选项

有四种可能的内存管理策略可供选择:

  1. PREALLOCATED_MEMORY_MODE:

    • 设置每种数据类型的大小为最大值,具有最大的内存占用但最小的分配次数。
  2. PREALLOCATED_WITH_REALLOC_MEMORY_MODE:

    • 设置每种数据类型的大小为默认值,当到达更大的消息时需要重新分配。这会降低内存占用但增加分配次数。
  3. DYNAMIC_RESERVE_MEMORY_MODE:

    • 在消息到达时动态分配大小,占用最少内存但导致最高分配次数。
  4. DYNAMIC_REUSABLE_MEMORY_MODE:

    • 类似于 DYNAMIC_RESERVE_MEMORY_MODE,但已分配内存在未来消息中被重用。

示例代码

以下是一个 C++ 示例,展示如何使用 DataWriterQos 配置不同类型的 locators:

// 创建 DataWriter 的 QoS 对象
DataWriterQos writer_qos;

// 添加新的单播 locator,端口号为 7800
eprosima::fastdds::rtps::Locator_t new_unicast_locator;
new_unicast_locator.port = 7800;
writer_qos.endpoint().unicast_locator_list.push_back(new_unicast_locator);

// 添加新的多播 locator,IP 为 239.255.0.4,端口号为 7900
eprosima::fastdds::rtps::Locator_t new_multicast_locator;
eprosima::fastdds::rtps::IPLocator::setIPv4(new_multicast_locator, "239.255.0.4");
new_multicast_locator.port = 7900;
writer_qos.endpoint().multicast_locator_list.push_back(new_multicast_locator);

// 添加一个外部 locator,IP 为 100.100.100.10,端口号12345,掩码24,外部性1和成本0
eprosima::fastdds::rtps::LocatorWithMask external_locator;
external_locator.kind = LOCATOR_KIND_UDPv4;
external_locator.port = 12345;
external_locator.mask(24);
writer_qos.endpoint().external_unicast_locators[1][0].push_back(external_locator);

// 忽略不匹配的 locators
writer_qos.endpoint().ignore_non_matching_locators = true;

// 设置用户定义 ID 为3
writer_qos.endpoint().user_defined_id = 3;

// 设置实体 ID 为4
writer_qos.endpoint().entity_id = 4;

// 将历史内存策略从预先分配切换到动态保留模式
writer_qos.endpoint().history_memory_policy = eprosima::fastdds::rtps::DYNAMIC_RESERVE_MEMORY_MODE;

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

这个示例演示了如何配置多个不同类型的位置,以满足特定应用程序对通信方式和性能需求。


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?