【问题标题】:QT Dbus sharing interface for two applications两个应用程序的QT Dbus共享接口
【发布时间】:2012-09-24 08:01:46
【问题描述】:

我有以下设置:

  • 我有两个应用程序,属于同一个逻辑组(逻辑组 = 我们公司的产品)
  • 这两个应用程序需要将 DBus 连接到同一个接口(我们有更多的产品,它们都应该使用自己的 DBus 接口)并公开一些功能(所有这些都使用 QtDBus)。

所以我尝试了(箭头不是 C++ 指针操作:)):

App1 -> get QDBusConnection::sessionBus();
App1 -> registerService("com.una-frog.ddm") 
App1 -> registerObject ("/DDM-gui")

然后

App2 -> get QDBusConnection::sessionBus();
App2 -> registerService("com.una-frog.ddm") 
App2 -> registerObject ("/DDM-cli")

并启动 App1 和 App2。

此时 App2 抱怨它无法注册服务,因为 App1 已经注册了它。没错。

我可以轻松地将 App1 注册到“com.una-frog.ddm.gui”,将 App2 注册到“com.una-frog.ddm.cli”,但我'宁愿尝试有一个通用接口和两个对象在那里执行所有必需的操作。

谁知道如何实现两个QtDBus应用程序连接到同一个接口?

【问题讨论】:

    标签: qt dbus


    【解决方案1】:

    这两个应用程序可以共享 DBus 接口 com.una-frog.ddm。但是 registerService 不适用于接口,它适用于 DBus services。服务名称不能在应用程序之间共享,因为它们用于路由方法调用(单播)。

    如果您重新设计您的 API,让两个应用改为侦听(广播)信号,那么您甚至不需要注册服务名称。

    或者,总线具有服务名称的排队所有者的概念(请参阅the specification 中的DBUS_NAME_FLAG_*)。如果两个应用程序提供相同的服务并且您不在乎哪个应用程序处理它,这将很有用。 Qt 好像有这个:http://doc.qt.digia.com/stable/qdbusconnectioninterface.html#registerService

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-22
      • 2018-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-12
      • 1970-01-01
      相关资源
      最近更新 更多