CoreRef

相关链接

代码文件:

参考示例:

接口概述

aimrt::CoreRef是调用框架功能的根句柄类型,可以通过以下两种方式获取:

  • 开发者继承ModuleBase类型实现自己的Module,在Initialize方法中,AimRT 框架会传入一个aimrt::CoreRef句柄;

  • App 模式下,通过 Create Module 方式,AimRT 会在创建一个Module后返回对应模块的aimrt::CoreRef句柄;

aimrt::CoreRef中提供的核心接口如下:

namespace aimrt {

class CoreRef {
 public:
  ModuleInfo Info() const;

  configurator::ConfiguratorRef GetConfigurator() const;

  executor::ExecutorManagerRef GetExecutorManager() const;

  logger::LoggerRef GetLogger() const;

  rpc::RpcHandleRef GetRpcHandle() const;

  channel::ChannelHandleRef GetChannelHandle() const;

  parameter::ParameterHandleRef GetParameterHandle() const;
};

}  // namespace aimrt

aimrt::CoreRef的使用注意点:

  • AimRT 框架会为每个模块生成一个专属CoreRef句柄,以实现资源隔离、监控等方面的功能。可以通过CoreRef::Info接口获取其所属的模块的信息。

  • 可以通过CoreRef中的GetXXX接口获取对应组件的句柄,来调用相关功能。具体组件的文档请参考:

使用示例

以下是一个简单的使用示例,演示了继承ModuleBase类型时如何获取并使用aimrt::CoreRef句柄:

class HelloWorldModule : public aimrt::ModuleBase {
 public:
  // ...

  bool Initialize(aimrt::CoreRef core) override {
    // Get log handle
    auto logger = core.GetLogger();

    // Use log handle
    AIMRT_HL_INFO(logger, "This is a test log");

    return true;
  }
};

以下是另一个简单的使用示例,演示了 App 模式下如何获取并使用aimrt::CoreRef句柄:

int32_t main(int32_t argc, char** argv) {
  AimRTCore core;

  // Initialize
  AimRTCore::Options options;
  if (argc > 1) options.cfg_file_path = argv[1];
  core.Initialize(options);

  // Get CoreRef handle
  aimrt::CoreRef module_handle(core.GetModuleManager().CreateModule("HelloWorldModule"));

  // Get log handle
  auto logger = module_handle.GetLogger();
  
  // Use log handle
  AIMRT_HL_INFO(logger, "This is a test log");

  // ...
}