У меня многопоточный сервер (наследует QTcpServer). Когда появляется новое соединение, я создаю новую задачу (наследует QRunnable), передаю дескриптор сокета конструктору и отправляю эту задачу в QThreadpool (имеет 3 рабочих).
QThreadPool::globalInstance()->start(task);
В run () я динамически создаю QTcpSocket, устанавливаю дескриптор сокета и читаю первый полученный байт. На основе значения этого байта я создаю новую конкретную задачу (также наследует QRunnable), передавая ее указатель ctr на ранее созданный объект QTcpSocket, а также отправляю эту задачу в QThreadpool.
Эта конкретная задача вызывает некоторые рутинные сбои приложений. Из файла журнала я вижу, что был вызван деструктор этой конкретной задачи.
Также Qt Creator выдает следующее сообщение об ошибке:
QObject: невозможно создать потомков для родителя, который находится в другом потоке. (Родительский поток - QNativeSocketEngine (0x18c62290), родительский поток - QThread (0x18c603e0), текущий поток - QThread (0x18cc3b60) QSocketNotifier: уведомители сокета не могут быть отключены из другого потока Ошибка ASSERT в QCoreApplication :: sendEvent: «Невозможно отправить события объектам в QCoreApplication :: sendEvent: другой поток. Текущий поток 18cc3b60. Receiver "" (типа "QNativeSocketEngine") был создан в потоке 18c603e0 ", файл kernel / qcoreapplication.cpp, строка 420
Я нашел похожие сообщения, но, к сожалению, не мог понять, как исправить свою проблему. Пожалуйста помогите.