# TimeBasedFilterQoS

# 功能介绍

该 QoS 功能仅作用于读者(DataReader),该 QoS 需设置时间变量:minimum_separation。该设置指定在特定时间周期(minimum_separation)内,无论 DataWriter 发布的新数据速度如何,DataReader 获取数据的次数不会超过一次。

# 兼容性

无兼容性要求。

# 使用方法

TimeBasedFilterQoS 成员列表如下表。

表 1 TimeBasedFilterQoS 成员列表
类型 字段名 描述
Duration_t minimum_separation 用于保存读者读取数据的周期时间。

# DataWrietr 端

无需设置。

# DataReader 端

1) QoS 赋值

对 minimum_separation 的 sec 赋秒数,对 minimum_separation 的 nanosec 赋纳秒数;赋值给 QoS 后,将 QoS 作为参数传入 create_datareader()。

创建上述回调函数指针,将该指针作为参数传入 create_datareader()。如下图所示。

图 1 DataReader 的 TimeBasedFilter 的 QoS 赋值

# 效果展示

1) 适用场景

①.DataReader 通过低带宽连接连接到网络,该连接生成的流量无法保持与 DataWriter 的匹配。

②. DataWriter 生成 DDS 样本的速率比 DataReader 处理它们的速率快。或比 DataReader 所需的更快。

③. DataReader 的资源限制导致从 DataWriter 接受的大量数据包没有时间处理。

2) 使用例子

读者现在因带宽,资源限制等各种原因,只想每隔 3 秒接受一次数据。那么读者就可以通过设置 TimeBasedFilterQoS,控制接受数据的周期、频率。

我们可以将写者的数据发送间隔设置为 1 秒(1000ms),然后将 DataReader 的 minimum_separation 的 sec 设置为 3,nanosec 设置为 0,并运行,结果如下图所示。

图 2 数据收发
可以看到,写者每隔一秒发送一次数据,读者每过 3 秒才会接受一次来自写者的数据。所以读者获取的数据为 1,4,7,10。