OpenDDS开发手册---第三章(服务质量)1

22 篇文章 3 订阅

3.1 介绍

    前面的示例对各种实体使用默认 qos 策略。本章讨论了在 OpenDDS 中实现的 qos 策略以及它们的使用.有关在此中讨论的策略的更多信息, 请参见 dds 规范。

3.2 Qos 策略

    每个策略定义一个用于指定其数据的结构。每个实体都支持策略的子集, 并定义由受支持的策略结构组成的 qos 结构。给定实体的允许策略集受嵌套的策略结构约束在其 qos 结构中。例如, 发布者的 qos 结构是在规范的 idl :
module DDS {
struct PublisherQos {
PresentationQosPolicy presentation;
PartitionQosPolicy partition;
GroupDataQosPolicy group_data;
EntityFactoryQosPolicy entity_factory;
};
};
    设置策略与获取已设置了默认值的结构一样简单,根据需要修改各个策略结构, 然后应用 qos 结构到实体 (通常是在创建时)。我们展示了如何获取默认 qos 的示例3.2.1 节中的各种实体类型的策略。
    应用程序可以通过调用 set_qos () 操作来更改任何实体的 qos在实体上。如果 qos 是可更改的, 则现有关联将被删除, 如果它们不再兼容和新的关联被添加, 如果它们变得兼容。dcpsinforepo根据 qos 规范重新评估 qos 兼容性和关联性。如果兼容性检查失败, 对 set_qos () 的调用将返回错误。关联重新评估可能导致删除现有的协会或新的协会的加法。
    如果用户尝试更改不可变的 qos 策略, 则set_qos () 返回 dds:: RETCODE_IMMUTABLE_POLICY。
   qos 策略的一个子集是可更改的。一些可更改的 qos 策略, 如USER_DATA, TOPIC_DATA, GROUP_DATA, LIFESPAN, OWNERSHIP_STRENGTH, TIME_BASED_FILTER,ENTITY_FACTORY, WRITER_DATA_LIFECYCLE, 和READER_DATA_LIFECYCLE, 不需要兼容性和关联重估。DEADLINE 和 LATENCY_BUDGET 的 qos 策略需要进行兼容性重新评估, 但不能用于关联。PARTITION  qos 策略不需要兼容性重新评估, 但需要关联重新评估。dds规范列表 TRANSPORT_PRIORITY 可变, 但 OpenDDS 实现不支持动态修改此策略。

3.2.1 默认的QoS策略值

   应用程序通过实例化 qos 结构来获取实体的默认 qos 策略实体的适当类型, 并通过引用传递给相应的在适当的工厂实体上执行 get_default_entity_qos () 操作。(例如, 您将使用域参与者获取发布服务器或订阅服务器的默认 qos。下面的示例说明如何获取发布服务器、订阅服务器的默认策略,主题、域参与者、数据编写者和数据读取器
// Get default Publisher QoS from a DomainParticipant:
DDS::PublisherQos pub_qos;
DDS::ReturnCode_t ret;
ret = domain_participant->get_default_publisher_qos(pub_qos);
if (DDS::RETCODE_OK != ret) {
std::cerr << "Could not get default publisher QoS" << std::endl;
}
// Get default Subscriber QoS from a DomainParticipant:
DDS::SubscriberQos sub_qos;
ret = domain_participant->get_default_subscriber_qos(sub_qos);
if (DDS::RETCODE_OK != ret) {
std::cerr << "Could not get default subscriber QoS" << std::endl;
}

// Get default Topic QoS from a DomainParticipant:
DDS::TopicQos topic_qos;
ret = domain_participant->get_default_topic_qos(topic_qos);
if (DDS::RETCODE_OK != ret) {
std::cerr << "Could not get default topic QoS" << std::endl;
}
// Get default DomainParticipant QoS from a DomainParticipantFactory:
DDS::DomainParticipantQos dp_qos;
ret = domain_participant_factory->get_default_participant_qos(dp_qos);
if (DDS::RETCODE_OK != ret) {
std::cerr << "Could not get default participant QoS" << std::endl;
}
// Get default DataWriter QoS from a Publisher:
DDS::DataWriterQos dw_qos;
ret = pub->get_default_datawriter_qos(dw_qos);
if (DDS::RETCODE_OK != ret) {
std::cerr << "Could not get default data writer QoS" << std::endl;
}
// Get default DataReader QoS from a Subscriber:
DDS::DataReaderQos dr_qos;
ret = sub->get_default_datareader_qos(dr_qos);
if (DDS::RETCODE_OK != ret) {
std::cerr << "Could not get default data reader QoS" << std::endl;
}

下表总结了 OpenDDS 中每个实体类型的默认 qos 策略, 以可应用哪些策略












  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

道格拉斯范朋克

播种花生牛奶自留田

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值