【发布时间】:2016-01-14 04:16:03
【问题描述】:
我想使用 QT/MinGW 创建一个 Windows 系统服务,该服务通过 DBUS(来自 freedesktop.org)与其他应用程序通信。目前 DBUS 作为“服务”运行,意味着它是使用 instsrv/srvany 工具作为服务安装的(但是,DBUS 稍后将获得它的 bus-service-win)。由于作为服务运行,DBUS 作为系统总线运行。
我编写了一个简单的应用程序来确保 DBUS 正常工作(使用 1 种方法在简单对象上创建并使用 QDBusViewer 执行它)。嗯,这行得通。
接下来,我尝试在我的服务的 ServiceMain 中使用相同的 DBUS 内容,其中 ServiceMain 是我们自己创建的类的成员)。我可以在 QDBusViewer 中看到该对象,但是当我选择它时,QDBusViewer 在卡住了一段时间后报告了超时(没有回复)。
我在我的测试应用程序中看到了这种行为,并且可以通过在创建 DBus 对象后在 app.exec() 上创建 QCoreApplication“应用程序”和“块”来修复它。我在服务中尝试了同样的方法,但得到了一个警告,说 QCoreApplication 没有在主线程中创建,问题仍然存在。
我尝试在调用 StartServiceControlDispatcher() 的函数中创建“app”并在 ServiceMain 中运行 app.exec,但 app.exec() 立即退出并出现错误“必须从主线程调用”。
我该如何克服这个问题?之前非常感谢。
【问题讨论】: