【FastDDS】Layer DDS之Domain ( 04-DomainParticipantFactory)

Fast DDS 域參與者工廠(DomainParticipantFactory)詳解

一、域參與者工廠(DomainParticipantFactory)基礎定義

域參與者工廠(DomainParticipantFactory)的唯一作用是實現域參與者(DomainParticipant)對象的創建與銷毀。該類自身不存在工廠類,而是以單例(singleton)對象的形式存在,可通過 DomainParticipantFactory 類的靜態成員函數 get_instance() 來獲取其實例。

DomainParticipantFactory 的行為可通過 DomainParticipantFactoryQos(域參與者工廠服務質量)中指定的 QoS 值進行修改。由于 DomainParticipantFactory 是單例對象,其 QoS 只能通過 DomainParticipantFactory::set_qos() 成員函數進行調整。

需要注意的是,DomainParticipantFactory 并非實體(Entity),因此不支持關聯任何監聽器(Listener)。

二、域參與者工廠服務質量(DomainParticipantFactoryQos)

DomainParticipantFactoryQos 用于控制 DomainParticipantFactory 的行為,其內部包含以下 QosPolicy(服務質量策略)對象,各策略的訪問器/修改器及可變性信息如下表所示:

QosPolicy(服務質量策略)類訪問器/修改器(Accessor/Mutator)可變性(Mutable)
EntityFactoryQosPolicy(實體工廠服務質量策略)entity_factory()是(Yes)
ThreadSettings(線程設置)shm_watchdog_thread()否(No)
ThreadSettings(線程設置)file_watch_threads()否(No)

(一)QoS 修改規則與作用

由于 DomainParticipantFactory 是單例對象,其 QoS 僅能通過 DomainParticipantFactory::set_qos() 成員函數修改。其中,EntityFactoryQosPolicy 策略中的 autoenable_created_entities(自動啟用創建的實體)參數尤為關鍵——該參數直接決定了通過 DomainParticipantFactory 創建的 DomainParticipant 是否在創建后自動啟用:

  • autoenable_created_entities = true 時,新創建的 DomainParticipant 會自動啟用,無需額外調用啟用函數。
  • autoenable_created_entities = false 時,新創建的 DomainParticipant 處于禁用狀態,需手動調用啟用函數才能正常工作。

(二)DomainParticipantFactoryQos 操作示例代碼

以下代碼展示了如何修改 DomainParticipantFactory 的 QoS,并基于不同 QoS 配置創建 DomainParticipant

DomainParticipantFactoryQos qos;// 1. 將autoenable_created_entities設為true:創建的DomainParticipant會自動啟用
qos.entity_factory().autoenable_created_entities = true;
if (DomainParticipantFactory::get_instance()->set_qos(qos) != RETCODE_OK)
{// 錯誤處理return;
}// 基于上述QoS創建DomainParticipant(返回的域參與者已自動啟用)
DomainParticipant* enabled_participant =DomainParticipantFactory::get_instance()->create_participant(0, PARTICIPANT_QOS_DEFAULT);
if (nullptr == enabled_participant)
{// 錯誤處理return;
}// 2. 將autoenable_created_entities設為false:創建的DomainParticipant會處于禁用狀態
qos.entity_factory().autoenable_created_entities = false;
if (DomainParticipantFactory::get_instance()->set_qos(qos) != RETCODE_OK)
{// 錯誤處理return;
}// 基于上述QoS創建DomainParticipant(返回的域參與者需手動啟用)
DomainParticipant* disabled_participant =DomainParticipantFactory::get_instance()->create_participant(0, PARTICIPANT_QOS_DEFAULT);
if (nullptr == disabled_participant)
{// 錯誤處理return;
}

三、從 XML 文件加載配置文件(Loading Profiles from an XML File)

若需基于 XML 配置文件(Profiles)創建實體(Entities),需先加載包含這些配置文件的 XML 文件。具體規則與操作流程如下:

(一)配置文件加載規則

  1. 自動加載:若配置文件定義在默認加載的文件中(如 Fast DDS 預設的配置文件),則在系統初始化時會自動加載,無需額外操作。
  2. 手動加載:若配置文件位于非默認文件中,需調用 load_XML_profiles_file() 成員函數手動加載 XML 文件中的配置。關于 XML 配置文件的格式規范及自動加載機制,可參考“XML Profiles”(XML 配置文件)章節。

(二)加載 XML 配置文件并創建實體的示例代碼

以下代碼展示了如何手動加載 XML 配置文件,并使用其中的配置創建 DomainParticipant

// 加載包含配置文件的XML文件(文件名為"profiles.xml")
DomainParticipantFactory::get_instance()->load_XML_profiles_file("profiles.xml");// 基于XML中定義的配置文件(名為"participant_profile")創建DomainParticipant
DomainParticipant* participant_with_profile =DomainParticipantFactory::get_instance()->create_participant_with_profile(0, "participant_profile");
if (nullptr == participant_with_profile)
{// 錯誤處理return;
}

通過上述操作,創建的 DomainParticipant 會自動應用 XML 配置文件中“participant_profile”配置項定義的 QoS settings,無需在代碼中逐一設置,大幅提升了配置的靈活性與可維護性。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/95526.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/95526.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/95526.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

樹莓集團建數字產業學院:產教融合強化成渝人才鏈與產業鏈銜接

成渝地區雙城經濟圈建設是國家重大發展戰略,而人才鏈與產業鏈的有效銜接,是推動成渝地區產業高質量發展的關鍵。樹莓集團順應時代發展需求,搭建數字產業學院,以產教融合為紐帶,不斷強化成渝人才鏈與產業鏈的銜接&#…

在 ASP.NET 8 WebAPI 中使用不同的提供程序驗證多個令牌(Token)及常見問題解答

介紹作為 ASP.NET 框架的最新版本,ASP.NET 8提供了強大的功能,可用于構建安全且可擴展的 Web API。API 開發的一個關鍵方面是身份驗證,它確保只有授權用戶或服務才能訪問受保護的資源。在本文中,我們將探討如何在 ASP.NET 8 API 中…

工業相機為啥丟包?黑條 / 撕裂的原因 + 解決辦法,一看就懂

工業相機為啥丟包?黑條/撕裂的原因解決辦法,一看就懂 工業相機拍圖時出現黑條、撕裂、花屏,別急著換設備——大概率是“數據丟包”在搞鬼。尤其是高頻率、高分辨率采圖時,數據傳輸稍出問題,圖像就會出故障。今天用“快…

【IQA技術專題】NIQE代碼講解

本文是對NIQE圖像質量評價指標的代碼解讀,原文解讀請看NIQE文章講解。 本文的代碼來源于IQA-Pytorch工程。 1、原文概要 NIQE實現了無參考的圖像質量評價指標,可以有效地對圖像的感知(Fidelity)質量進行評估。本文提出了一種完全…

配置時鐘分頻與倍頻

在STM32微控制器中,“配置時鐘分頻與倍頻”是一個關鍵步驟,它允許開發者根據應用需求調整系統時鐘的頻率。以下是對這一概念的詳細解釋:時鐘源與基礎頻率時鐘源:STM32微控制器通常支持多種時鐘源,如高速外部時鐘&#…

【深度學習新浪潮】視覺大模型在預訓練方面有哪些關鍵進展?

近年來,視覺大模型在預訓練領域取得了多項突破性進展,涵蓋架構設計、多模態融合、數據利用效率及訓練策略等多個維度。以下結合2024-2025年最新研究成果,從技術創新和應用突破兩方面展開分析: 一、架構創新:突破分辨率與模態限制 超高分辨率預訓練 伯克利與英偉達提出的P…

Elasticsearch原理篇

Elasticsearch原理篇寫在前面:用之于手,先明于心一、傳統數據庫的瓶頸:當數據量成為負擔1. 千萬級數據下的性能衰減2. 分頁查詢的“深水陷阱”3. 關聯查詢的擴展難題4. 全文檢索能力薄弱二、Elasticsearch 的優勢:為搜索而生的分布…

《我是如何用C語言寫工控系統的漏洞和Bug》連載(1)內容大綱

第一部分:導論與基礎 第1章 引言 1.1 工控系統的獨特性和重要性 實時性、可靠性、長生命周期的要求與IT系統的差異:后果不再是信息泄露,而是物理世界的中斷與破壞 1.2 為什么C語言依然是工控領域的主流? 性能、底層硬件操作、歷史…

.Net程序員就業現狀以及學習路線圖(三)

一、.Net程序員就業現狀分析 1. 市場需求與薪資水平 ?市場需求兩極分化?:2025年數據顯示,.Net開發崗位全國占比約0.009%,主要集中在深圳、上海等一線城市 2 3。高端崗位(云原生/AI集成方向)年薪可達36-60萬&#xff…

云計算學習100天-第40天 -普羅米修斯1

目錄 Prometheus 概述—— 安裝prometheus 案例 環境說明 實驗步驟 一、prometheus服務器配置時間同步 二、安裝Prometheus服務器 配置文件說明 三、編寫服務啟動文件并啟動服務 四、訪問web頁面 Prometheus 概述—— Prometheus是一個開源系統監控和警報工具包&a…

高效文本處理:cut、sort、uniq 和 tr 命令詳解與實戰

前言 🔪 一、cut —— 按列或字符截取 常用選項: 示例: 🔄 二、sort —— 排序(默認按行首字符升序) 常用選項: 示例: 🧼 三、uniq —— 去除連續重復行 常用選項…

時序數據庫選型指南:Apache IoTDB為何成為工業物聯網首選?

引言:時序數據管理的時代挑戰 隨著工業4.0和物聯網技術的快速發展,全球時序數據呈現爆炸式增長。據IDC預測,到2025年,全球物聯網設備產生的數據量將達到79.4ZB,其中超過60%為時序數據。這類數據具有顯著特征&#xff…

Ubuntu查看開機以來修改的文件

獲取本次開機時間 uptime -s獲取開機時間之后修改的文件 find /home -type f -newermt "2025-09-03 18:10:12"解讀:-type f意為只查找類型為“普通文件”(file),不包括目錄、鏈接等。newermt 代表“修改時間比指定時間新…

差分隱私在運營指標:ABP 的 DP 計數器與噪聲預算

🚦 差分隱私在運營指標:ABP 的 DP 計數器與噪聲預算 📚 目錄🚦 差分隱私在運營指標:ABP 的 DP 計數器與噪聲預算0. TL;DR 🚀📈 一圖看懂(寫入→發布→預算→加噪)1. 背景…

洛谷 P1077 [NOIP 2012 普及組] 擺花-普及-

P1077 [NOIP 2012 普及組] 擺花 題目描述 小明的花店新開張,為了吸引顧客,他想在花店的門口擺上一排花,共 mmm 盆。通過調查顧客的喜好,小明列出了顧客最喜歡的 nnn 種花,從 111 到 nnn 標號。為了在門口展出更多種花&…

時序數據庫選型指南:為何Apache IoTDB成為工業物聯網首選

引言:時序數據管理的挑戰與機遇 在工業4.0與物聯網技術深度融合的今天,全球設備產生的時序數據量正以指數級增長。據IDC預測,到2025年物聯網設備產生的數據將達79.4ZB,其中60%為時序數據。這類數據具有高頻采集(毫秒級…

【C++】C++入門—(中)

前言:上一篇文章我們介紹了C入門的一些基礎的語法,將了命名空間,缺省參數等。這篇文章我們就來介紹剩余的語法。 文章目錄一,函數重載二,引用2.1引用的概念和定義2.2引用的特性2.3引用的引用場景2.3.1做函數形參&#…

嵌入式Linux驅動開發:i.MX6ULL按鍵中斷驅動(非阻塞IO)

嵌入式Linux驅動開發:i.MX6ULL按鍵中斷驅動(非阻塞IO) 概述 本文檔詳細介紹了在i.MX6ULL開發板上實現按鍵中斷驅動的完整過程。該驅動程序實現了非阻塞IO操作,允許用戶空間應用程序通過poll系統調用高效地監控按鍵狀態變化&…

從 @Schedule 到 XXL-JOB:分布式定時任務的演進與實踐

從Schedule到XXL-JOB:分布式定時任務的演進與實踐 在分布式系統中,定時任務是常見需求(如數據備份、報表生成、緩存刷新等)。Spring框架的Schedule注解雖簡單易用,但在集群環境下存在明顯局限;而XXL-JOB作為…

阿里云營業執照OCR接口的PHP實現與技術解析:從簽名機制到企業級應用

一、阿里云營業執照OCR接口的核心技術架構 阿里云OCR服務基于深度學習模型和大規模數據訓練,針對中國營業執照的版式特征(如統一社會信用代碼位置、企業名稱排版、經營范圍換行規則等)進行了專項優化,識別準確率可達98%以上。其接口調用遵循RESTful API設計規范,采用HMAC…