OpenDDS - 从单个 IDL 结构创建多个主题

2024-04-14

在我的练习中OpenDDS我想从单个 IDL 结构创建多个主题,这可能吗?否则请让我知道该怎么做。

我是按照下面的方法做的,如果不对请指正。 我使用的示例可在OpenDDS-3.12/examples/DCPS/IntroductionToOpenDDS

IDL 如下:

StockQuoter.idl
---------------
module StockQuoter
{
#pragma DCPS_DATA_TYPE "StockQuoter::Quote"
#pragma DCPS_DATA_KEY "StockQuoter::Quote ticker"

  struct Quote {
    string ticker;
    string exchange;
    string full_name;
    double value;
    string data;
    TimeBase::TimeT timestamp;
  };
}

出版商.cpp


  // Create TOPICS and TYPES Vector
  std::stringstream ss;
  for(unsigned int idx = 0; idx < 100; ++idx)
  {
      ss << (idx+1);
      TOPICS.push_back("TOPIC" + std::string(ss.str()));
      TYPES.push_back("TYPE" + std::string(ss.str()));
      ss.clear();
      ss.str(std::string());
  }

     // Register
    for( unsigned int idx = 0; idx < 100; ++idx )
    {
        vec_quote_servent.push_back(new StockQuoter::QuoteTypeSupportImpl());
        if (DDS::RETCODE_OK != vec_quote_servent[idx]->register_type(participant.in (), TYPES[idx].c_str()))
        {
          cerr << "register_type for " << TYPES[idx] << " failed." << endl;
          ACE_OS::exit(1);
        }
    }

    // Create a topics
    for( unsigned int idx = 0; idx < 100; ++idx )
    {
         vec_quote_topic.push_back(   participant->create_topic (TOPICS[idx].c_str(),
                                      TYPES[idx].c_str(),
                                      default_topic_qos,
                                      DDS::TopicListener::_nil(),
                                      ::OpenDDS::DCPS::DEFAULT_STATUS_MASK));

         if (CORBA::is_nil (vec_quote_topic[idx].in ())) {
             cerr << "create_topic for " << TOPICS[idx] << " failed." << endl;
             ACE_OS::exit(1);
        }
     }

    // Create DataWriters
    for( unsigned int idx = 0; idx < 100; ++idx )
    {
         vec_quote_base_dw.push_back( pub->create_datawriter(vec_quote_topic[idx].in (),
                                      dw_default_qos,
                                      DDS::DataWriterListener::_nil(),
                                      ::OpenDDS::DCPS::DEFAULT_STATUS_MASK) );

        if (CORBA::is_nil (vec_quote_base_dw[idx].in ())) {
           cerr << "create_datawriter for " << TOPICS[idx] << " failed." << endl;
           ACE_OS::exit(1);
        }

        vec_quote_dw.push_back( StockQuoter::QuoteDataWriter::_narrow(vec_quote_base_dw[idx].in()) );
        if (CORBA::is_nil (vec_quote_dw[idx].in ())) {
          cerr << TOPICS[idx] << " could not be narrowed"<< endl;
          ACE_OS::exit(1);
        }
    }

    // Create handle
    for( unsigned int idx = 0; idx < 100 ; ++idx )
    {
        {
            StockQuoter::Quote topic2;
            topic2.ticker = CORBA::string_dup(TOPICS[idx].c_str());
            vec_topic_handle.push_back(vec_quote_dw[idx]->register_instance(topic2));
        }
    }

      // Publish data
      StockQuoter::Quote vec_quote;
      vec_quote.exchange = STOCK_EXCHANGE_NAME;
      vec_quote.ticker = CORBA::string_dup("VEC_TOPIC");
      vec_quote.full_name = CORBA::string_dup("TOPIC Receipts");
      vec_quote.value = 1600.0 + 10.0*i;
      vec_quote.timestamp = get_timestamp();

      for(unsigned int idx = 0; idx < 100; ++idx )
      {
          vec_quote.value += idx + 10;
          cout << "Publishing " << TOPICS[idx] << " : " << vec_quote.value <<endl;
          ret = vec_quote_dw[idx]->write(vec_quote, vec_topic_handle[idx]);
          if (ret != DDS::RETCODE_OK) {
             ACE_ERROR ((LM_ERROR, ACE_TEXT("(%P|%t) ERROR: TOPIC2 write returned %d.\n"), ret));
          }
      }

a,现在我明白你想问的问题了。您可以在每个主题的一个文件中或全部在一个文件中定义不同的主题类型。如果您在 IDL 文件中定义多个主题类型,则会为每个文件生成类型支持。让我用您使用的相同示例更准确地描述这一点。 IDL 文件为IntroductionToOpenDDS示例如下:

#include "orbsvcs/TimeBase.idl"

module StockQuoter
{
#pragma DCPS_DATA_TYPE "StockQuoter::Quote"
#pragma DCPS_DATA_KEY "StockQuoter::Quote ticker"

struct Quote {
    string ticker;
    string exchange;
    string full_name;
    double value;
    TimeBase::TimeT timestamp;
};

#pragma DCPS_DATA_TYPE "StockQuoter::ExchangeEvent"
#pragma DCPS_DATA_KEY "StockQuoter::ExchangeEvent exchange"

enum ExchangeEventType { TRADING_OPENED,
                       TRADING_CLOSED,
                       TRADING_SUSPENDED,
                       TRADING_RESUMED };
struct ExchangeEvent {
    string exchange;
    ExchangeEventType event;
    TimeBase::TimeT timestamp;
};
};

如您所见,定义了两种类型:Quote and ExchangeEvent。编译此 IDL 文件时,键入对两者的支持Quote and ExchangeEvent被生成。 您已经使用了使用此行的类型支持(QuoteTypeSupportImpl):

    vec_quote_servent.push_back(new StockQuoter::QuoteTypeSupportImpl());

生成相同类型的支持ExchangeEvent,你会发现一个名为的类型支持StockQuoter::ExchangeEvent with a StockQuoter::ExchangeEventTypeSupportImpl()方法。只需使用它来创建一个主题类型ExchangeEvent.

我希望这有帮助。如果需要更多详细信息,请随时询问。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenDDS - 从单个 IDL 结构创建多个主题 的相关文章

  • 检测到 NuGet 包的版本冲突

    我正在开发 ASP Net core 2 1 Web 应用程序项目 我的解决方案中有 1 个项目和 3 个其他库 它是高级架构 数据访问层 DAL 业务层 BL 公共层 CL 所以我需要添加引用来连接一些库和项目 我已经添加了CL参考我的项
  • Tensorflow 中的自定义资源

    由于某些原因 我需要为 Tensorflow 实现自定义资源 我试图从查找表实现中获得灵感 如果我理解得好的话 我需要实现3个TF操作 创建我的资源 资源的初始化 例如 在查找表的情况下填充哈希表 执行查找 查找 查询步骤 为了促进实施 我
  • Mono 无法保存用户设置

    我在 Mono Ubuntu 上保存用户设置时遇到问题 这是代码示例 private void Form1 Load object sender EventArgs e string savedText Properties Setting
  • 如何进行带有偏差的浮点舍入(始终向上或向下舍入)?

    我想以偏置舍入浮动 要么总是向下 要么总是向上 代码中有一个特定的点 我需要这个 程序的其余部分应该像往常一样四舍五入到最接近的值 例如 我想四舍五入到最接近的 1 10 倍数 最接近 7 10 的浮点数约为 0 69999998807 但
  • 捕获 foreach 条件中抛出的异常

    我有一个foreach在 foreach 本身的条件下循环期间中断的循环 有没有办法try catch抛出异常然后继续循环的项 这将运行几次 直到异常发生然后结束 try foreach b in bees exception is in
  • 处理 fanart.tv Web 服务响应 JSON 和 C#

    我正在尝试使用 fanart tv Webservice API 但有几个问题 我正在使用 Json Net Newtonsoft Json 并通过其他 Web 服务将 JSON 响应直接反序列化为 C 对象 这里的问题是元素名称正在更改
  • 有什么工具可以说明每种方法运行需要多长时间?

    我的程序的某些部分速度很慢 我想知道是否有我可以使用的工具 例如它可以告诉我可以运行 methodA 花了 100ms 等等 或者类似的有用信息 如果您使用的是 Visual Studio Team System 性能工具 中有一个内置分析
  • ASP .NET MVC,创建类似路由配置的永久链接

    我需要帮助在 MVC 网站中创建类似 URL 路由的永久链接 Slug 已设置为 www xyz com profile slug 代码为 routes MapRoute name Profile url profile slug defa
  • 在 C# 中将位从 ulong 复制到 long

    所以看来 NET 性能计数器类型 http msdn microsoft com en us library system diagnostics performancecounter aspx有一个恼人的问题 它暴露了long对于计数器
  • 范围和临时初始化列表

    我试图将我认为是纯右值的内容传递到范围适配器闭包对象中 除非我将名称绑定到初始值设定项列表并使其成为左值 否则它不会编译 这里发生了什么 include
  • C# 创建数组的数组

    我正在尝试创建一个将使用重复数据的数组数组 如下所示 int list1 new int 4 1 2 3 4 int list2 new int 4 5 6 7 8 int list3 new int 4 1 3 2 1 int list4
  • C# 编译器如何决定发出可重定向的程序集引用?

    NET Compact Framework 引入了可重定向程序集引用 现在用于支持可移植类库 基本上 编译器会发出以下 MSIL assembly extern retargetable mscorlib publickeytoken 7C
  • 在 C 中复制两个相邻字节的最快方法是什么?

    好吧 让我们从最明显的解决方案开始 memcpy Ptr const char a b 2 调用库函数的开销相当大 编译器有时不会优化它 我不会依赖编译器优化 但即使 GCC 很聪明 如果我将程序移植到带有垃圾编译器的更奇特的平台上 我也不
  • C# 搜索目录中包含字符串的所有文件,然后返回该字符串

    使用用户在文本框中输入的内容 我想搜索目录中的哪个文件包含该文本 然后我想解析出信息 但我似乎找不到该字符串或至少返回信息 任何帮助将不胜感激 我当前的代码 private void btnSearchSerial Click object
  • 过期时自动重新填充缓存

    我当前缓存方法调用的结果 缓存代码遵循标准模式 如果存在 则使用缓存中的项目 否则计算结果 在返回之前将其缓存以供将来调用 我想保护客户端代码免受缓存未命中的影响 例如 当项目过期时 我正在考虑生成一个线程来等待缓存对象的生命周期 然后运行
  • 如何检测 C# 中该字典键是否存在?

    我正在使用 Exchange Web 服务托管 API 和联系人数据 我有以下代码 即功能性的 但并不理想 foreach Contact c in contactList string openItemUrl https service
  • 内核开发和 C++ [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 从我know https stackoverflow com questions 580292 what languages are windo
  • 我应该在应用程序退出之前运行 Dispose 吗?

    我应该在应用程序退出之前运行 Dispose 吗 例如 我创建了许多对象 其中一些对象具有事件订阅 var myObject new MyClass myObject OnEvent OnEventHandle 例如 在我的工作中 我应该使
  • boost::program_options:带有固定和可变标记的参数?

    是否可以在 boost program options 中使用此类参数 program p1 123 p2 234 p3 345 p12 678 即 是否可以使用第一个标记指定参数名称 例如 p 后跟一个数字 是动态的吗 我想避免这种情况
  • Swagger 为 ASP.CORE 3 中的字典生成错误的 URL

    当从查询字符串中提取的模型将字典作为其属性之一时 Swagger 会生成不正确的 URL 如何告诉 Swagger 更改 URL 中字典的格式或手动定义输入参数模式而不自动生成 尝试使用 Swashbuckle 和 NSwag 控制器 pu

随机推荐

  • ECMAScript5 对象和数组的深拷贝

    我希望找到一个示例代码来对 ECMAScript5 中的对象进行深度复制 复制应该可以克隆 嵌套对象 嵌套数组 数组中的嵌套对象 单独克隆每个数组项 注意 jQuery extend 似乎不处理情况 3 另外 我希望用干净的 ECMAScr
  • 将击键从 C# 应用程序发送到 Java 应用程序 - 奇怪的行为?

    我正在尝试将击键从 C 程序发送到 Java 应用程序 发送密钥的代码是 private void SendKeysToWindow string WindowName string KeysToSend IntPtr hWnd FindW
  • 使用 z-index 将 div 置于另一个 div 上方

    我想要div1高于div2 我尝试与z index但它不起作用 我试过这段代码 div width 100px height 100px div1 background red z index 1 div2 background blue
  • 以编程方式将文件上传到 Google 文档

    我的电子书文件夹中有很多大约 50GB 的 pdf 文件 现在我想将它们上传到 Google 文档中 例如 Linux 的 Rsync 是否可以使用 php 或 python 脚本将电子书文件夹和子文件夹中的所有 pdf 文件上传到 Goo
  • 更改<选择多个>中所选选项的颜色[重复]

    这个问题在这里已经有答案了 我遇到这个问题 我需要在单击 选择时更改一个 多个选项元素的颜色 单击时默认颜色为蓝色 我相信我们现在应该有一个解决方案 因为我尝试搜索解决方案但无济于事 希望在 CSS 或 vanilla JS 中做到这一点
  • 在 Office 加载项清单中指定 ~remoteAppUrl 的值

    我正在使用 Outlook 编写一个加载项新框架 http dev office com docs add ins overview office add ins 项目模板中的清单使用 remoteAppUrl来表示网页文件的位置 它在开发
  • 在ggplot2中手动指定刻度标签

    在 ggplot2 中 我有一个图表 其 y 轴位于 log10 x 1 上 我还没有找到直接指定 ggplot2 使用 log10 x 1 刻度的方法 所以我想直接修改 y 轴刻度标签 而不是 0 0 5 1 1 5 和 2 这些刻度将显
  • DRF:如何在保存到数据库之前更改模型字段的值

    如果我需要在保存到数据库之前更改一些字段值 因为我认为模型方法clear 适合 但尽管我竭尽全力 还是无法给他打电话 例如字段email我需要设置为小写和领域nda我需要设置为null 模型 py class Vendors models
  • jQuery colorbox:如何更改颜色框的位置

    默认情况下 颜色框在屏幕上垂直和水平居中显示 有没有办法改变它 例如从顶部垂直调整为 10 水平居中 这将覆盖顶部位置 您可以对 left 等执行相同的操作 colorbox top 100px important 从顶部开始 10 会更棘
  • Windows Azure 网站 python

    经过大量的艰苦工作 我最终得到了一个在 Windows Azure 上运行的 hello world Flask 应用程序 该应用程序是本地构建的并且运行良好 但将其部署到 Azure 是一场噩梦 所以我这里有两个问题 我似乎根本无法获得堆
  • SQL Server 中的行偏移

    SQL Server 有什么方法可以获取从给定偏移量开始的结果吗 例如 在另一种类型的 SQL 数据库中 可以执行以下操作 SELECT FROM MyTable OFFSET 50 LIMIT 25 得到结果51 75 SQL Serve
  • IVY 部分的循环依赖

    在一个项目中 我想将我的库切换到ivy部分编译模式 角度12 但现在遇到了一些令人讨厌的循环依赖错误 Error 从例子 Compiling with Angular sources in Ivy partial compilation m
  • 为什么字符串不等于存储的内容?

    这是一个简单而奇怪的问题 if tableViewNum One if drinkArray objectAtIndex 0 currentDate updatedArray addObject drinkArray NSLog MADE
  • 为什么我的 ViewController 重新打开后不显示另一个 SKScene?

    所以现在我正在编写一个游戏 但遇到了一个我没有真正找到解决方案的问题 我会尽力为你描述它 所以 为了能够更好地解释我的问题 我为你们创建了一个示意图 现在问题是 我有两个视图控制器 一个称为MenuVc 另一个称为GameVC In Gam
  • ant命令不生成apk文件

    我正在使用 Ant 构建我的应用程序 我的应用程序使用库项目 所以首先我在命令行中运行以下命令以在我的项目中生成 build xml 安卓更新 项目 target 5 p 我的项目路径 l 我的库项目路径 我的应用程序的构建目标是 4 0
  • 将常见的剃刀助手移至另一个文件

    我有一个 MVC4 Web 应用程序 目前有一些 helper是我在多个页面上使用的 在 cshtml 中定义 问题是 我必须在使用它们的每个页面上定义它们 是否有可能创建一个 cshtml包含我所有的文件 helper并将该页面包含到我的
  • 如何永久添加Python导入路径?

    我知道我可以像这样添加 Python 的导入路径 import sys sys path append path to directory 但是 当我重新启动 Python 时 这个问题就消失了 如果我必须一直这样做 我会觉得很烦人 我想一
  • 使用 Jenkins xUnit 插件显示 QTestlib 的结果

    我正在尝试将 Jenkins xUnit 插件用于我的 Qt 单元测试项目 但我无法使其工作 这是我到目前为止所做的 首先 我使用 qmakebuilder 插件构建我的单元测试项目 向 qmakebuilder 插件提供 pro 然后添加
  • 如何使用 Selenium 获取网站的图标

    我需要获取网站的图标 我怎样才能做到这一点 您将无法使用 Selenium 获取网站图标 您必须使用另一个程序来获取它 您获得它的唯一方法是您的网站将 favicon ico 呈现为链接 例如 然而 通常网站只是将 favicon ico
  • OpenDDS - 从单个 IDL 结构创建多个主题

    在我的练习中OpenDDS我想从单个 IDL 结构创建多个主题 这可能吗 否则请让我知道该怎么做 我是按照下面的方法做的 如果不对请指正 我使用的示例可在OpenDDS 3 12 examples DCPS IntroductionToOp