# OwnerShipQoS

# 功能介绍

当有多个写者与同一个读者进行通信并发送同一种类型的数据的时候,此 QoS 可以控制读者是接受所有写者发送的数据还是只接受一名写者的数据。该功能由 Kind 的值决定是接受所有写者数据还是只接受一名。

以下为该 QoS 的 kind 属性能设置的值:

DDS_SHARED_OWNERSHIP_QOS:接收者接收所有数据发送者发送的数据

DDS_EXCLUSIVE_OWNERSHIP_QOS:接收者只接收一个数据发送者发送的数据。由 OWNERSHIP_STRENGTH 策略决定哪个发送者有效(通常是权重最大的那个)。

# 兼容性

开启服务后,DDS 服务会对写者和读者的 OwnerShipQoS 的 kind 值进行比对检查,如果 DataWriter 的 OwnerShipQoS.kind= DataReader 的 OwnerShipQoS.kind 则兼容。也就是读者与写者有关 OwnerShipQoS 的 kind 值必须一致才能通讯。

# 使用方法

OwnerShipQoS 成员列表如下表。

表 1 OwnerShipQoS 成员列表
类型 字段名 描述
Ownership- QoSPolicy- Kind Kind 决定读者是获取所有能够通信的写者数据还是只获取一个写者的数据。 读取所有(共享式): DDS_SHARED_OWNERSHIP_QOS 读取单个(独占式): DDS_EXCLUSIVE_OWNERSHIP_QOS

# DataWrietr 端

1) QoS 赋值

对 DDS_DataWriterQoS 数据类型的变量 wQoS 下的 ownership 进行赋值。若对 ownership.kind 赋值为 DDS_SHARED_OWNERSHIP_QOS(共享式),那么用于表示权重的 wQoS.ownership_strength.value 就可以不用设置。

若对 ownership.kind 赋值为 DDS_EXCLUSIVE_OWNERSHIP_QOS(独占式),那么就需要对 wQoS.ownership_strength.value 进行设置,权重的数据类型为无符号整型。

最后 wQoS 在写者创建的时候作为参数传入 create_datawriter。

图 1 DataWriter的OwnerShipQoS的QoS赋值

# DataReader 端

1) QoS 赋值

对 DDS_DataReadrQoS 数据类型的变量 rQoS 下的 ownership.kind 进行赋值,并且读者不管设置的是共享式还是独占式,都不需要对权重进行设置。

最后 rQoS 在读者创建的时候作为参数传入 create_datareader。

图 2 DataReader的OwnerShipQoS的QoS赋值