Russian Qt Forum

Qt => Многопоточное программирование, процессы => Тема начата: __Heaven__ от Июнь 16, 2014, 16:38



Название: У меня не получается отправить в поток мой класс
Отправлено: __Heaven__ от Июнь 16, 2014, 16:38
Здравствуйте!
Прочитал статью, как правильно использовать QThread, но, видимо, что-то упустил.

У меня существует класс MainWidget, который отвечает за прорисовку интерфейса и класс Solver, отвечающий за функционал программы.
В конструкторе первого пишу:
Код:
    thread = new QThread(this);

    connect(thread, SIGNAL(started()), solver, SLOT(run()));
    connect(solver, SIGNAL(finished()), thread, SLOT(terminate()));
    solver->moveToThread(thread);

При нажатии на кнопку вызывается слот:
Код:
void MainWidget::convert()
{
    saveSettings();

    thread->start();
//    QtConcurrent::run(solver, &Solver::run);
}

При такой реализации интерфейс застывает и ждёт, когда solver закончит свою работу.
При реализации QtConcurrent::run(solver, &Solver::run); всё работает прекрасно.
Что я не так делаю? Прошу помощи.


Название: Re: У меня не получается отправить в поток мой класс
Отправлено: OKTA от Июнь 16, 2014, 16:49
Покажите кода хоть еще чуть-чуть  :)
Solver хотя бы  :)


Название: Re: У меня не получается отправить в поток мой класс
Отправлено: carrygun от Июнь 17, 2014, 04:19
А как создан экземпляр Solver? Ваш MainWidget не должен быть ему родителем.


Название: Re: У меня не получается отправить в поток мой класс
Отправлено: __Heaven__ от Июнь 17, 2014, 08:06
А как создан экземпляр Solver? Ваш MainWidget не должен быть ему родителем.
Буду знать. Спасибо. Комментарий помог решить проблему.