gpt4 book ai didi

c++ - 让redhawk组件访问另一个组件的属性

转载 作者:行者123 更新时间:2023-12-02 10:39:19 24 4
gpt4 key购买 nike

假设我有两个Redhawk组件。组件1具有称为“抽头”的属性。组件2还需要知道“抽头”的值。如果组件2可以查找组件1的“taps”值,而不是赋予它自己的“taps”值,则事情将变得容易得多。组件2如何访问组件1的属性?我正在用c++实现这些组件。

我已经尝试使用以下代码resource port

int NeedsProperties_i::serviceFunction(){

CF::Properties otherProperties;

otherProperties.length(1);

otherProperties[0].id = "name";

resourceOut->query(otherProperties);

std::cout << "name: " << any_to_string(otherProperties[0].value) <<
std::endl;

sleep(1);

return NORMAL;
}

std::string NeedsProperties_i::any_to_string(CORBA::Any value) {

std::ostringstream result;
const char* tmp;
value >>= tmp;
result << tmp;
return result.str();

}

在这种情况下,NeedsProperties是组件2,它正试图从另一个组件获取属性“名称”。 NeedsProperties具有连接到组件的输出资源端口“resourceOut”。无论资源端口是否连接,该代码仅输出空字符串。这里发生了什么?此外,资源端口是否甚至是实现此目的的好方法,还是有更好的实现方法?

最佳答案

使用REDHAWK 2.1.3,我可以使用示例代码从组件2成功查询组件1(具有ID为“name”的属性)。

需要注意的两件事是,您将从查询不存在的属性中获得异常-Component1是否具有ID为“name”的属性?如果尝试从属性中解码错误的类型,则将没有任何值(value)。使用 ossie::any_to_string()帮助程序是取消编码简单CORBA对象的首选方法。

替代实现将使用PropertyChangeListeners。当“属性”获得新值时,将生成并发布一个事件供任何人抓取。在Component2中,您需要从PropertyChangeListener继承,使用Component1上的属性ID调用registerPropertyChangeListener()并处理更改事件。您可以看到 redhawk / src / testing / tests / test_08_PropertyChange * .py 来获取处理PropertyChangeEvent的python代码。

关于c++ - 让redhawk组件访问另一个组件的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51772156/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com