crossplatform.ru

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


  Ответ в QObject в QThread
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
BRE Дата 7.11.2011, 14:15
 
Цитата(urandom @ 7.11.2011, 15:08) *
Но как тогда удалять объект? deleteLater() ?

Если смотреть на последний вариант, то никак. Он сам разрушиться при выходе из run.
urandom Дата 7.11.2011, 14:08
  Премного благодарен.
Но как тогда удалять объект? deleteLater() ?
BRE Дата 7.11.2011, 13:58
 
Цитата(ssoft @ 7.11.2011, 14:52) *
Правильно так

Ну тогда я бы добавил wait. Перед разрушением стоит дождаться реального завершения нитки.

MyThread::~MyThread()
{
    quit();
        wait();
}
ssoft Дата 7.11.2011, 13:52
  Правильно так

MyThread::MyThread(QObject *parent) :
    QThread(parent)
{
}

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

/// PROTECTED ///

void MyThread::run()
{
    MyObject myObject;
    connect(parent(), SIGNAL(mySignal(QString)), &myObject, SLOT(mySlot(QString)));
    // тут еще куча сигналов/слотов

    exec();
}


Нельзя просто так удалять объект MyObject в деструкторе, т.к. они сопоставлены разным потокам.
Ну и завершить поток нужно, чтобы не болтался.
urandom Дата 7.11.2011, 13:37
  Код потока:

MyThread::MyThread(QObject *parent) :
    QThread(parent)
{
}

MyThread::~MyThread()
{
    delete MyObject;
}

/// PROTECTED ///

void MyThread::run()
{
    myObject = new MyObject();
    connect(parent(), SIGNAL(mySignal(QString)), myObject, SLOT(mySlot(QString)));
    // тут еще куча сигналов/слотов

    exec();
}


Думаю, показывать код объекта нет смысла.
wiz29 Дата 7.11.2011, 12:11
 
Цитата(urandom @ 6.11.2011, 23:40) *
пожалуйста, выскажите свое мнение.


Нужно посмотреть код, со слов все как то запутано.
ssoft Дата 7.11.2011, 8:35
 
Цитата(urandom @ 6.11.2011, 23:40) *
на сколько я знаю, обрабатывает слоты родитель объекта (или не знаю?)


Что-то здесь не так.

Цитата(urandom @ 6.11.2011, 23:40) *
все это конечно работает, но вот правильно ли я это все реализую?


По описанию, все правильно.

Можно посмотреть тему
http://www.forum.crossplatform.ru/index.ph...c=7751&st=0
urandom Дата 6.11.2011, 22:40
  приветствую.
извините за возможно тупой и не раз обсуждаемый вопрос, но как можно нормально обработать слоты объекта в потоке?
на сколько я знаю, обрабатывает слоты родитель объекта (или не знаю?)

в общем я поместил объект в поток (не moveToThread, а создал отдельный объект потока и в него сунул объект и создал его через в run())
основной же объект связал с тем что в потоке через систему сигналов-слотов.

все это конечно работает, но вот правильно ли я это все реализую?
или можно было поступить проще и эффективнее?

пожалуйста, выскажите свое мнение.
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 28.3.2024, 13:37