Как использовать привязки qt dbus в потоке posix?

Я пишу библиотеку для приложения, которая загружает мою библиотеку dinamycaly и запускает выполнение в потоке posix. Я попросил разработчиков приложения использовать QThreads, но они сказали, что ничего не могут изменить.

В моей библиотеке я хотел бы использовать привязки Qt Dbus, но это не очень хорошо работает, поскольку он не работает в контексте QThread. Я заметил две вещи:

  1. Я не получаю ответы на асинхронные вызовы (как объяснено в документация для QDBusPendingCallWatcher). Синхронные (блокирующие) звонки работают нормально.
  2. При создании интерфейса dbus я получаю следующее сообщение:

    QSocketNotifier: может использоваться только с потоками, запущенными с QThread
    QSocketNotifier: может использоваться только с потоками, запущенными с QThread

Вся найденная информация говорит о том, что мне нужно создать QThread, чтобы он работал, а не использовать потоки posix, но у меня нет выбора.

Можно ли заставить QSocketNotifier работать из не-QThread контекста? Если да, то как?


PS Я могу скомпилировать библиотеку qt из исходных текстов и делать с ней все что угодно. Так что, даже исправление было бы хорошо.


я нашел этот патч для qt 4.8 включить установку диспетчера пользовательских событий. Но я не уверен, что это что-то сломает, и если это потокобезопасно. Поиграюсь немного с ним и посмотрим, работает ли он.

1

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]