QThreads - зачем выделять память внутри конструктора, а не иметь нормального члена класса? - PullRequest
0 голосов
/ 07 июня 2018

http://doc.qt.io/qt-5/qthread.html

class Controller : public QObject
{
    Q_OBJECT
    QThread workerThread;
public:
    Controller() {
        Worker *worker = new Worker;
        worker->moveToThread(&workerThread);
        connect(&workerThread, &QThread::finished, worker, &QObject::deleteLater);
        connect(this, &Controller::operate, worker, &Worker::doWork);
        connect(worker, &Worker::resultReady, this, &Controller::handleResults);
        workerThread.start();
    }

Мой путь:

class Controller: public QObject
{
    Q_OBJECT
public:
    Worker  objWorker;
    QThread objQThread;

    Controller();
    ~Controller();

public slots:
    void receiveImage();
};

и

Controller::Controller()
{
    objWorker.moveToThread( &objQThread );

    connect( &objWorker, &Worker::imageReady, this, &Controller::receiveImage );

    objQThread.start();
}

Является ли их метод лучше моего?Что должно быть предпочтительнее в этом случае?

1 Ответ

0 голосов
/ 07 июня 2018

From: http://doc.qt.io/qt-5/qthread.html

Начиная с Qt 4.8, можно освобождать объекты, которые живут в только что завершившемся потоке, подключив сигнал finish () к QObject:: deleteLater ().

Этого можно достичь, только сделав объект-указатель класса Worker и выделив ему память.

...