我想使用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()立即退出,并显示错误”必须从主线程调用“。
我怎么才能克服这一切呢?在此之前,我非常感谢。
发布于 2015-10-21 15:24:43
将我自己的服务类与"QT解决方案“中的QtService类进行比较,解决了我的问题。
毕竟,我需要将StartServiceControlDispatcher()函数放入QThread中,并以这样一种方式更改我的服务类的方法:只有在SCM上下文中明确运行时才执行exec()。
https://stackoverflow.com/questions/33153050
复制相似问题