0

我的波形在启动时初始化良好,但在处理几秒钟后,它会在 IDE 的 SCA Explorer 选项卡右侧的符号上弹出一个红旗。工具提示显示“无法查询属性值”。

我相信这个问题是由组件中的“处理”方法花费太长时间引起的,但我需要能够获取相当长的数据块列表中的某个元素,这样我才能处理每个块。因此,我需要有一个组件的属性来引用这个长长的数据列表。有没有更好的方法来做到这一点?我创建了一个子进程来完成所有这些工作,但这有点违背了使用 REDHAWK 来管理执行的目的。

谢谢你的时间!

4

1 回答 1

1

本,

第一步是准确了解发生了什么错误。这可以按照此处列出的步骤来完成。基本上:

  1. 窗口 > 显示视图 > 其他 ...
  2. 选择常规 > 属性。现在应该可以看到属性视图
  3. 在 SCA Explorer 视图中,选择带有红色标志符号的应用程序
  4. 现在在“属性”视图中,您应该看到两个选项卡“属性”和“高级”。在“高级”选项卡中,将有一个状态字段显示“无法查询属性值...”。当您选择此字段时,它将显示一个“详细信息...”按钮。单击以接收错误的堆栈跟踪。

另一种选择是使用 Python Sandbox(或 unittest)功能来启动您的组件并尝试查询。等效的错误将作为 Python 异常抛出。您可以在此处了解沙盒。

至于问题的第二部分,REDHAWK process() 方法已经作为子线程执行,因此除非您创建了线程锁(或在 serviceFunction 中使用了 propertySetAccess 锁,否则它不会阻塞 query() 操作)。如果您正在使用锁,那么 query() 可能会阻塞,直到达到 CORBA 超时。您将知道这是否已经发生,因为堆栈跟踪将是 CORBA 超时错误。

但是,您说“我需要让组件的属性成为对这一长长数据列表的引用”,所以我认为您可能会遇到与最大 CORBA 传输大小相关的错误。您可以通过编辑 /etc/omniORB.cfg 来调整 CORBA 最大传输大小,这样问题就消失了,但是您的组件会给使用它的其他人带来问题。更好的选择是重新考虑组件的设计。您可能希望使用 BULKIO 端口将数据传入和传出组件。

如果您可以提供有关您正在使用的算法或源代码示例的更多详细信息,则可以提供有助于隔离根本问题的附加信息。

于 2013-06-28T06:42:55.667 回答