match...-Go服务器开发" />

ZBLOG

两段代码。一段是发送信号,一段是接收信号: auto signal = this->bus.new_signal( "/xyz/openbmc_project/state", "xyz.openbmc_project.State.BMC", "bmcReady"); signal.signal_send(); std::unique_ptr match...

根据你提供的代码,接收信号部分的匹配条件中有一个小错误。在你的匹配字符串中,你将接口名写成了 xyz/openbmc_project.State.BMC,而在发送信号时,使用的是 "xyz.openbmc_project.State.BMC"(两个地方的格式不一致)。这可能导致接收端无法匹配到发送的信号。

请检查和更新以下几点:

  1. 匹配条件中的接口名: 确保你的接口名是正确的。具体来说,确保你在接收端和发送端都使用相同的接口名称。如果你的发送信号代码是这样的:
  1. auto signal = this->bus.new_signal(
  2. "/xyz/openbmc_project/state",
  3. "xyz.openbmc_project.State.BMC",
  4. "bmcReady");

那么在接收端,你应该保持这个形式:

  1. match = std::make_unique<sdbusplus::bus::match_t>(
  2. static_cast<sdbusplus::bus_t&>(*conn),
  3. "path='/xyz/openbmc_project/state',interface='xyz.openbmc_project.State.BMC',type='signal',"
  4. "member='bmcReady'",
  5. [&powerRestore](sdbusplus::message_t& m) {
  6. std::cout << "-----------begin to run----------" << std::endl;
  7. if (m.is_method_error()) {
  8. std::cerr << "callback method error" << std::endl;
  9. return;
  10. }
  11. powerRestore.run();
  12. }
  13. );
  1. 检查DBus连接: 确保 conn 是有效且已连接的 DBus 连接对象。

  2. 事件循环: 确保程序没有在发出信号后立即退出。监听需要一个持续运行的事件循环。

  3. 日志输出: 你可以考虑在回调函数外部添加一些调试信息,以确认是否成功创建了 match 对象,并确保它保持有效状态。

  4. 测试简化版本: 你可以尝试简化匹配表达式,只用路径或只用接口进行测试,这样可以更容易定位问题。例如,可以先仅按路径匹配:

  1. match = std::make_unique<sdbusplus::bus::match_t>(
  2. static_cast<sdbusplus::bus_t&>(*conn),
  3. "path='/xyz/openbmc_project/state'",
  4. [&powerRestore](sdbusplus::message_t& m) {
  5. std::cout << "Received message on path" << std::endl;
  6. // ...
  7. }
  8. );

如果经过这些检查仍然不能正常工作,请提供更多上下文,例如如何初始化 DBus 连接,以及主线程或事件循环的实现,以便我能够提供进一步的帮助。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处: match...">https://golang.0voice.com/?id=22236

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?