Russian Qt Forum
Ноябрь 23, 2024, 02:11 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Многопоточный сервер  (Прочитано 2723 раз)
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());
Почему то не могу я перенести объект в главный поток, почему?
Записан
lucky
Гость
« Ответ #1 : Февраль 22, 2011, 19:30 »

Забыл добавить, что вылетает ошибка:
Код:
QObject::moveToThread: Current thread (0x9707250) is not the object's thread (0x970fa88).
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.056 секунд. Запросов: 21.