当前位置: 首页 > news >正文

Fastdds_ContentFilteredTopicExample_代码剖析5_create_publisher

        在注册完类型之后,我们就可以看见,域参与者对发布者进行创建了。

        

    publisher_ = participant_->create_publisher(PUBLISHER_QOS_DEFAULT, nullptr);if (nullptr == publisher_){return false;}

        他首先进入了头文件中的这个函数

    Publisher* create_publisher(const PublisherQos& qos,PublisherListener* listener = nullptr,const StatusMask& mask = StatusMask::all());

        我们可以看到他需要传入3个参数,qos策略用于保证数据传输的要求得以满足,监听器用于返回发生的事件,mask用于表示发布者监听器所监听的状态掩码,用于指定监听哪些状态的变化。但实际上他只需要传入qos。我们可以看到他这里传入的是一个默认的QOS,然后域参与者将让实体去对发布者进行创建


Publisher* DomainParticipant::create_publisher(const PublisherQos& qos,PublisherListener* listener,const StatusMask& mask)
{return impl_->create_publisher(qos, listener, mask);
}

        之后他会转到域参与者实体的这个函数

  

    Publisher* create_publisher(const PublisherQos& qos,PublisherListener* listener,const StatusMask& mask){return create_publisher(qos, nullptr, listener, mask);}

        他又重新传入了另一个creat,而下一个creat才是真正创建发布者的地方

        

    Publisher* create_publisher(const PublisherQos& qos,PublisherImpl** impl,PublisherListener* listener = nullptr,const StatusMask& mask = StatusMask::all()){PublisherImpl* pubimpl = create_publisher_impl(qos, listener);Publisher* pub = new Publisher(pubimpl, mask);pubimpl->user_publisher_ = pub;std::lock_guard<std::mutex> lock(mtx_pubs_);publishers_[pub] = pubimpl;pub->enable();if (impl){*impl = pubimpl;}return pub;}

我们可以看到publisher同样有一个实体,如同域参与者一样。实体负责功能的具体实现。在创建完之后,将新创建的发布者对象 pub 存储到 publishers_ 中,以便后续可以根据发布者对象的名称快速找到对应的发布者实现对象。在之后将发布者启动。如果传入的参数 impl 不为空,则将 pubimpl 指针赋值给 impl,以便外部调用者可以获取到发布者的具体实现对象。之后便将其返回了.


http://www.mrgr.cn/news/29533.html

相关文章:

  • 【C++】多态的认识和理解
  • Java 中的 sleep、wait、join 怎么理解
  • Verdin AM62 引脚复用配置
  • 【MySQL】MySQL连接池原理与简易网站数据流动是如何进行
  • yaml注入配置文件
  • IEEE-754 32位十六进制数 转换为十进制浮点数
  • 游戏开发应具备的心理学知识
  • 【Python机器学习】NLP信息提取——正则模式
  • Kubernetes从零到精通(12-Ingress、Gateway API)
  • Sqlmap中文使用手册 - File system access模块参数使用
  • 米壳AI:跨境电商必备:不损失原图的图片翻译工具!
  • 感谢问界M9一打二十,让我们买到这么便宜的BBA
  • element-ui 日期选择器设置禁用日期
  • Games101图形学笔记——着色
  • day22JS-对象静态方法
  • 如何编写可维护的代码:最佳实践与技巧
  • 克隆centos网卡uuid相同如何修改
  • 进程的重要函数
  • 基于树表的查找
  • 网络封装分用