QQuickImageProvider vs QThread/QObject



  • Всем привет
    У меня тут странная (или нет) вещь, не совсем понимаю в чем фишка.
    Может кто подскажет почему именно так работает.

    Есть клиент с QML UI, провайдер картинок, по requestPixmap идет выгрузка в Canvas на QML. Загрузка картинок идет через RPC-клиент, который работает на QTCPSocket и Google Protobuffer структурах. И вот RPC-движок использует некоторый класс RPCChannel, который вызывает виртуальный метод CallMethod (нужный удаленный вызов процедуры).

    Программа работает нестабильно и всплывает сообщение* QSocketNotifier: socket notifiers cannot be disabled from another thread*. Однако! Если этот RPCChannel унаследован от QThread, вместо QObject и никаких start(), quit() и тд нигде не делается, то удивительным образом программа работает как надо, но при этом не совсем понятно почему именно так?

    Цепочка такая: QML -> QQuickImageProvider -> RPC клиент -> RPC канал (унаследован от QThread) -> получение данных через QTCPSocket. Вопрос упирается в 4 звено.

    При попытке в CallMethod сделать запись и чтение в QTCPSocket в отдельном потоке, падает сам сервис, отвечающий за отгрузку картинок. В рабочей версии, где канал унаследован от потока, в CallMethod достаточно дописать socket->moveToThread(this) и все супер,


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.