crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> QThread не прекращает работу(((, QThread
fortero
  опции профиля:
сообщение 6.10.2011, 13:49
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 132
Регистрация: 4.12.2010
Пользователь №: 2242

Спасибо сказали: 0 раз(а)




Репутация:   0  


Господа специалисты, подскажите как быть с QThread как бы всё работает но при закрытии последнего окна виджета программа висит, тред дальше пашет...
Подскажите где я ошибся:
#include <QtGui>
#include "firstclass.h"
#include "secondclass.h"

int main(int argc, char** argv){
    QApplication app(argc, argv);
    
    SecondClass Sc;
    Sc.start();
    FirstClass Fc;
    Fc.show();
    
    app.connect(&app, SIGNAL(lastWindowClosed()), &Sc, SLOT(stop()));    
    
    return app.exec();
}


secondclass.cpp
#include "secondclass.h"

SecondClass::SecondClass() : QThread(){
    st=false;
}

void SecondClass::run(){
    
    while(st!=true){
        qDebug() << "YES";
    }
        
}

void SecondClass::stop(){
    st=true;
}


Спасибо за внимание!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
silver47
  опции профиля:
сообщение 7.10.2011, 4:00
Сообщение #2


Активный участник
***

Группа: Участник
Сообщений: 356
Регистрация: 1.4.2010
Пользователь №: 1584

Спасибо сказали: 40 раз(а)




Репутация:   6  


Сокеты нужно слушать не в постоянном цикле, а запустить цикл обработчика событий... а дальше на сигналах - слотах.
Создание сокета и его запуск:
void Server::incomingConnection(int socketDescriptor){        
    // создаем отдельный поток на каждое клиентское подключение      
    ServerThread *thread = new ServerThread(socketDescriptor);
    QObject::connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));            
    thread->start();
}


сам поток:
ServerThread::ServerThread(QObject *parent) : QThread(parent), socketDescriptor(socketDescriptor){
    socket = new QSslSocket;
    //-----------------
    // Signals & Slots
    //-----------------
    QObject::connect(socket, SIGNAL(readyRead()), this, SLOT(readyRead()));
    QObject::connect(socket, SIGNAL(encrypted()), this, SLOT(encrypted()));
    QObject::connect(socket, SIGNAL(sslErrors(QList<QSslError>)), this, SLOT(sslErrors(QList<QSslError>)));
    QObject::connect(socket, SIGNAL(disconnected()), this, SLOT(disconnected()));
    QObject::connect(socket, SIGNAL(connected()), this, SLOT(connected()));
    QObject::connect(socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(error(QAbstractSocket::SocketError)));

    if(socket->setSocketDescriptor(socketDescriptor)){
       //qDebug() << "  sslSocket mode: " << (int)sslSocket.mode();
       //qDebug() << "  sslSocket state:" << (int)sslSocket.state();

       //qDebug() << "Calling sslSocket->startServerEncryption()";
       socket->startServerEncryption();
    }
    else {
        //qDebug() << "Couldn't setSocketDescriptor(" << socketDescriptor << ") for this connection";
        return;
    }
}
void ServerThread::run(){
    this->exec();
}



Сообщение отредактировал silver47 - 7.10.2011, 4:07
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- fortero   QThread не прекращает работу(((   6.10.2011, 13:49
- - silver47   Неверно используете поток.   6.10.2011, 14:01
- - fortero   Покажите как надо... А то я только такого типа при...   6.10.2011, 15:09
- - RazrFalcon   thread->quite();   6.10.2011, 15:49
- - fortero   Не получается всёравно весит! Покажите пожалу...   6.10.2011, 15:59
- - silver47   Если вы делаете цикл типа: while(someBoolVaria...   6.10.2011, 17:37
- - fortero   Спасибо попробую. Цитата(silver47 @ 6.10.201...   6.10.2011, 20:49
- - fortero   Ребят, я что то не догоняю или совсем тупой. Пожал...   6.10.2011, 21:53
- - silver47   Сокеты нужно слушать не в постоянном цикле, а запу...   7.10.2011, 4:00
- - fortero   Цитата(silver47 @ 7.10.2011, 4:00) Сокеты...   7.10.2011, 14:23
|- - ssoft   Пардон, не всю тему прочитал. А так если вернутьс...   8.11.2011, 15:54
- - silver47   С Qt идет пример Thread Fortune Server, но его осо...   7.10.2011, 18:18
- - fortero   Всем спасибо разобрался!   8.10.2011, 13:32
- - sidsukana   Сделал все как сказано. В конструкторе инициализац...   7.11.2011, 22:09
- - Гость_AK_   Простите, может немного не по теме, но имел очень ...   8.11.2011, 11:18
- - Galaxycon   Вот что смущает... В переделанном примере (аттач ...   17.4.2012, 14:07


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 4.1.2026, 20:55