Я создаю небольшой многопоточный веб-сервер. QTcpSockets выбираются в главном потоке, а затем передаются QtConcurrent в QThreadPool, который в конечном итоге обрабатывает данные и отправляет ответ.
Моя проблема в том, что сокет создается в главном потоке и обрабатывается в другом. Это вызывает ошибки при попытке записи в сокет:
socket->write(somedata);
QObject: Невозможно создать дочерние объекты для
родитель, который находится в другой теме.
(Родитель
QNativeSocketEngine (0x608330),
родительский поток - QThread (0x600630),
текущий поток - QThread (0x505f60)
Чистым способом было бы переместить объект сокета в поток обработки, используя
socket->moveToThread(QThread::currentThread()).
Это, однако, можно вызывать только в потоке, в котором был создан объект. Кроме того, сокет имеет в качестве родительского объекта QTcpServer, так что moveToThread () в любом случае завершится ошибкой (парентные объекты не могут переключать потоки).
Как я могу переместить объект в QThread :: currentThread () в коде, который запускается пулом потоков? Кроме того, как я могу записать в сокет вне потока, он был создан?