• dds:subscribe:DataReader


    创建数据读取器

    DataReader始终属于Subscriber 。DataReader 的创建是通过create_datareader()Subscriber 实例上的成员函数完成的,它充当 DataReader 的工厂。

    强制性论点是:

    绑定到将要传输的数据类型的主题。

    DataReaderQos描述 DataReader的行为。如果提供DATAREADER_QOS_DEFAULT的值为 ,则使用Default DataReaderQos的值。

    可选参数是:

    派生自DataReaderListener的侦听器,实现将触发的回调以响应 DataReader 上的事件和状态更改。默认情况下使用空回调。

    StatusMask激活或停用触发 DataReaderListener 上的单个回调的A。默认情况下,所有事件都已启用。

    create_datareader()如果在操作过程中出现错误,将返回一个空指针,例如,如果提供的 QoS 不兼容或不受支持。建议检查返回值是否为有效指针。

    // Create a DataReader with default DataReaderQos and no Listener
    // The value DATAREADER_QOS_DEFAULT is used to denote the default QoS.
    DataReader* data_reader_with_default_qos =
            subscriber->create_datareader(topic, DATAREADER_QOS_DEFAULT);
    if (nullptr == data_reader_with_default_qos)
    {
        // Error
        return;
    }
    
    // A custom DataReaderQos can be provided to the creation method
    DataReaderQos custom_qos;
    
    // Modify QoS attributes
    // (...)
    
    DataReader* data_reader_with_custom_qos =
            subscriber->create_datareader(topic, custom_qos);
    if (nullptr == data_reader_with_custom_qos)
    {
        // Error
        return;
    }
    
    // Create a DataReader with default QoS and a custom Listener.
    // CustomDataReaderListener inherits from DataReaderListener.
    // The value DATAREADER_QOS_DEFAULT is used to denote the default QoS.
    CustomDataReaderListener custom_listener;
    DataReader* data_reader_with_default_qos_and_custom_listener =
            subscriber->create_datareader(topic, DATAREADER_QOS_DEFAULT, &custom_listener);
    if (nullptr == data_reader_with_default_qos_and_custom_listener)
    {
        // Error
        return;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    基于配置文件的 DataReader 创建

    不使用 DataReaderQos,配置文件的名称可用于创建具有create_datareader_with_profile() 订阅服务器实例上的成员函数的 DataReader。

    强制性论点是:

    绑定到将要传输的数据类型的主题。

    具有标识 DataReader 的名称的字符串。

    可选参数是:

    派生自 DataReaderListener 的侦听器,实现将触发的回调,以响应 DataReader 上的事件和状态更改。默认情况下使用空回调。

    StatusMask激活或停用触发 DataReaderListener 上的单个回调的A。默认情况下,所有事件都已启用。

    create_datareader_with_profile()如果在操作过程中出现错误,将返回一个空指针,例如,如果提供的 QoS 不兼容或不受支持。建议检查返回值是否为有效指针。

    XML 配置文件必须先前已加载。请参阅从 XML 文件加载配置文件。

    // First load the XML with the profiles
    DomainParticipantFactory::get_instance()->load_XML_profiles_file("profiles.xml");
    
    // Create a DataReader using a profile and no Listener
    DataReader* data_reader_with_profile =
            subscriber->create_datareader_with_profile(topic, "data_reader_profile");
    if (nullptr == data_reader_with_profile)
    {
        // Error
        return;
    }
    
    // Create a DataReader using a profile and a custom Listener.
    // CustomDataReaderListener inherits from DataReaderListener.
    CustomDataReaderListener custom_listener;
    DataReader* data_reader_with_profile_and_custom_listener =
            subscriber->create_datareader_with_profile(topic, "data_reader_profile", &custom_listener);
    if (nullptr == data_reader_with_profile_and_custom_listener)
    {
        // Error
        return;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    删除数据读取器

    可以使用创建 DataReader 的订阅服务器实例delete_datareader()上的成员函数 删除 DataReader。

    只有当属于 DataReader (QueryConditions) 的所有实体都已被删除时,才能删除 DataReader。否则,函数会报错,DataReader 不会被删除。这可以通过使用DataReaderdelete_contained_entities()的成员函数 来执行。

    // Create a DataReader
    DataReader* data_reader =
            subscriber->create_datareader(topic, DATAREADER_QOS_DEFAULT);
    if (nullptr == data_reader)
    {
        // Error
        return;
    }
    
    // Use the DataReader to communicate
    // (...)
    
    // Delete the entities the DataReader created
    if (data_reader->delete_contained_entities() != ReturnCode_t::RETCODE_OK)
    {
        // DataReader failed to delete the entities it created.
        return;
    }
    
    // Delete the DataReader
    if (subscriber->delete_datareader(data_reader) != ReturnCode_t::RETCODE_OK)
    {
        // Error
        return;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
  • 相关阅读:
    java-net-php-python-s2s酒店管理系统计算机毕业设计程序
    量子计算:数据安全难题
    Reinforcement Learning 强化学习(四)
    Mybatis条件语句 status != ““,status = 0时不生效
    基于springboot实现毕业设计系统项目【项目源码+论文说明】
    贪婪算法(Huffman编码)
    TypeError: list indices must be integers or slices, not tuple 错误原因解决方法
    Vuex的使用
    【建议背诵】软考高项考试案例简答题汇总~12
    【spring源码解析】循环依赖的实现原理
  • 原文地址:https://blog.csdn.net/neuzhangno/article/details/127787380