Как управлять QThread в Qt С++?

Я пытаюсь изучить QThread в Qt. Я написал следующий код для QThread, который работает довольно хорошо.

    QThread* mThread = new QThread;
    FaceCutThread* mFaceCut = new FaceCutThread();
    mFaceCut->moveToThread(mThread);

    connect(mThread, SIGNAL(finished()), mFaceCut, SLOT(deleteLater()));
    connect(this, SIGNAL(operateFaceCut(std::string)), mFaceCut, SLOT(processFaceCut(std::string)));
    connect(mFaceCut, SIGNAL(isFinisedFaceCut(QImage,bool)), this, SLOT(handleFaceCutResults(QImage,bool)));
    mThread->start();

Теперь я хочу добавить еще один класс, который должен работать как QThread, например;

Enroll *mEnroll = new Enroll();

Должен ли я использовать объект mEnroll с предыдущим mThread или создать новый mThread2;

QThread* mThread2 = new QThread;
mEnroll->moveToThread(mThread2);

Каковы преимущества и недостатки?


person goGud    schedule 06.07.2015    source источник
comment
Одним из недостатков создания новых потоков является то, что создание потока требует временных затрат.   -  person drescherjm    schedule 06.07.2015


Ответы (1)


Это зависит от того, чего вы хотите достичь. Если вы поместите одни и те же классы в один и тот же поток, они будут выполняться в одном потоке. Если вы хотите, чтобы они выполнялись в отдельных потоках, поместите их в другой поток. Например, если вы хотите использовать их независимо друг от друга - один поток загружает/читает данные, второй обрабатывает данные и соединяет их через сигналы. Отдельные потоки создают проблемы с синхронизацией, если потоки совместно используют ресурсы и т. д. (длинная тема http://www.drdobbs.com/tools/avoiding-classic-threading-problems/231000499 ) Наличие объектов в одном потоке означает, что объекты имеют общие

  • Состояние регистра (включая ПК и указатель стека)

  • Куча

  • Сигнальная маска

  • приоритет

  • Потоковое хранилище

И это можно трактовать как преимущество или недостаток...

person Robert Wadowski    schedule 06.07.2015