我想使用QT / MinGW创建一个Windows系统服务,它通过DBUS与其他应用程序通信(来自freedesktop.org)。目前,DBUS作为“服务”运行,意思是它使用instsrv / srvany工具安装为服务(但是,DBUS将在以后获得它的总线服务获胜)。自从作为服务运行以来,DBUS作为系统总线运行。
我编写了一个简单的应用程序来确保DBUS正常工作(使用1方法在简单对象上创建并使用QDBusViewer进行处理)。嗯,这很有效。
接下来,我尝试在ServiceMain中使用与我的服务相同的DBUS内容,其中ServiceMain是我们自己创建的类的成员。我可以在QDBusViewer中看到该对象,但是一旦我选择它,QDBusViewer会在它停留一段时间后报告超时(没有回复)。
我在测试应用程序中看到过这种行为,并且可以通过在创建DBus对象后在app.exec()上创建QCoreApplication“app”和“block”来修复它。我在服务中尝试了相同的操作,但是警告说QCoreApplication没有在主线程中创建,问题仍然存在。
我尝试在调用StartServiceControlDispatcher()的函数中创建“app”并在ServiceMain中运行app.exec,但app.exec()立即退出,并显示错误“必须从主线程调用”。< / p>
我怎么能克服这个?在此之前非常感谢。
答案 0 :(得分:0)
将我自己的服务类与来自&#34; QT解决方案&#34;的QtService类进行比较解决了我的问题。
毕竟我需要将StartServiceControlDispatcher()函数放入QThread并以一种只在SCM上下文中明确运行时才执行exec()的方式更改服务类的方法。