Russian Qt Forum

Qt => Вопросы новичков => Тема начата: lucky от Февраль 22, 2011, 18:30



Название: Многопоточный сервер
Отправлено: lucky от Февраль 22, 2011, 18:30
Создал два класса FServer наследник от QTcpServer и FThread наследник от QThread. При подключении нового клиента создается отдельный поток и в него передается дескриптор подключившегося сокета.
Код:
void FServer::incomingConnection(int socketDescriptor)
{
    FThread *thread = new FThread(socketDescriptor, this);
    connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));
    connect(thread, SIGNAL(createNewSocket(QTcpSocket *)), this, SLOT(addNewSocket(QTcpSocket *)));
    thread->start();
}
//Слот
void FServer::addNewSocket(QTcpSocket *socket)
{
    arraySockets.push_back(socket);

    socket->moveToThread(QApplication::instance()->thread());
    qDebug() << "FServer -> tcpSocket" << socket->thread();
}
Код выполняющийся в отдельном потоке:
Код:
void FThread::run()
{
    QTcpSocket *tcpSocket = new QTcpSocket;

    if (!tcpSocket->setSocketDescriptor(socketDescriptor)) {
        emit error(tcpSocket->error());
        return;
    }

    //Обрабатываю сокет так как мне нужно

    emit createNewSocket(tcpSocket);

    qDebug() << "FThread -> tcpSocket" << tcpSocket->thread();

    tcpSocket->waitForDisconnected();
}

Тут ошибка:
Код:
socket->moveToThread(QApplication::instance()->thread());
Почему то не могу я перенести объект в главный поток, почему?


Название: Re: Многопоточный сервер
Отправлено: lucky от Февраль 22, 2011, 19:30
Забыл добавить, что вылетает ошибка:
Код:
QObject::moveToThread: Current thread (0x9707250) is not the object's thread (0x970fa88).