我正在为应用程序编写一个库,它加载我的库 dinamycaly,并在 posix 线程中开始执行。我要求应用程序的开发人员使用 QThreads,但他们说他们无法更改任何内容。
在我的库中,我想使用 Qt Dbus 绑定,但它并不能很好地工作,因为它没有在 QThread 上下文中运行。我注意到两件事:
- 我没有收到对异步调用的响应(如QDBusPendingCallWatcher 的文档中所述)。同步(阻塞)调用工作正常。
创建 dbus 接口时收到下一条消息:
QSocketNotifier:只能用于以 QThread 启动的线程
QSocketNotifier:只能用于以 QThread 启动的线程
我找到的所有信息都说我需要创建 QThread 才能使其工作,而不是使用 posix 线程,但我别无选择。
是否可以让 QSocketNotifier 在非 QThread 上下文中工作?如果是,如何?
PS 我可以从源代码编译 qt 库,并且可以做任何我喜欢的事情。因此,即使修补它也可以。
我找到了 qt 4.8 的这个补丁来启用自定义事件调度程序的安装。但我不确定它是否会破坏任何东西,以及它是否是线程安全的。会玩一点,看看它是否有效。