QThreads - 为什么在构造函数中分配内存而不是使用普通的 class 成员?
QThreads - Why allocate memory inside a constructor rather than having a normal class member?
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();
}
他们的方法在某些方面比我的好吗?在哪种情况下应该首选哪个?
发件人:http://doc.qt.io/qt-5/qthread.html
From Qt 4.8 onwards, it is possible to deallocate objects that live in
a thread that has just ended, by connecting the finished() signal to
QObject::deleteLater().
这只能通过制作Worker的指针对象class并为其分配内存来实现。
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();
}
他们的方法在某些方面比我的好吗?在哪种情况下应该首选哪个?
发件人:http://doc.qt.io/qt-5/qthread.html
From Qt 4.8 onwards, it is possible to deallocate objects that live in a thread that has just ended, by connecting the finished() signal to QObject::deleteLater().
这只能通过制作Worker的指针对象class并为其分配内存来实现。