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;
}


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


Участник
**

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

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




Репутация:   0  


Цитата(silver47 @ 7.10.2011, 4:00) *
Сокеты нужно слушать не в постоянном цикле, а запустить цикл обработчика событий... а дальше на сигналах - слотах.
Создание сокета и его запуск:
.....................


Спасибо огромное!
Я понимаю я наверное прошу многое, но Вы не могли написать готовый рабочий пример сокетов в отдельном потоке даже без шифрования.
В этой теме я сильно плаваю, мне нужен готовый простейший, правильный пример что бы разобраться как, что работает...
Ещё раз огромное спасибо!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ssoft
  опции профиля:
сообщение 8.11.2011, 15:54
Сообщение #3


Участник
**

Группа: Участник
Сообщений: 130
Регистрация: 17.2.2010
Из: Москва
Пользователь №: 1470

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




Репутация:   3  


Пардон, не всю тему прочитал.

А так если вернуться к началу, то можно что-то типа этого ))).

Пример 1. Завершение потока.

    class MyThread : public QThread
    {
        Q_OBJECT


    private:
        QAtomicInt run_flag;

    public:
        MyThread ( QObject * parent );
        virtual ~MyThread ();

    public slots:
        void begin ();
        void end ();

    protected:
        virtual void run ();
    };


    MyThread::MyThread ( QObject * parent )
        : QThread( parent )
        , run_flag( true )
    {
    };

    MyThread::~MyThread ()
    {
        end();
    };

    void MyThread::begin ()
    {
        run_flag.fetchAndStoreOrdered( true );
        start();
    };

    void MyThread::end ()
    {
        run_flag.fetchAndStoreOrdered( false );
        wait();
    };

    bool MyThread::isReady () const
    {
        return run_flag;
    };

    void MyThread::run ()
    {
        while ( run_flag )
        {
            // ...
        }
    };


Пример 2. Слушающий сокет в потоке (без наворотов).

QThread * thread = new QThread( parent );
QTcpSocket * socket = new QTcpSocket();

socket->moveToThread( thread );

// ... настройки, коннекты и т.д.

thread->start();


Не забыть удалить socket.

Сообщение отредактировал ssoft - 8.11.2011, 15:58
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- 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


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


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




RSS Текстовая версия Сейчас: 30.1.2025, 7:25