在Qt中,线程完成时对象会发生什么?

时间:2016-03-26 18:56:18

标签: c++ multithreading qt qthread

我有一个简单的QObject

class Engine : public QObject
{
    Q_OBJECT
public:
    explicit Engine(QObject* parent = 0);
signals:
    void finished();
public slots:
    void start();
};

实例Engine* engine存储在主窗口类中。按下按钮时,会发生以下情况:

QThread* thread = new QThread;
engine->moveToThread(thread);
connect(engine, SIGNAL(error(QString)), this, SLOT(errorString(QString)));
connect(thread, SIGNAL(started()), engine, SLOT(start()));
connect(engine, SIGNAL(finished()), thread, SLOT(quit()));
connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));
thread->start();

我的问题是,engine完成后thread会发生什么?我可以创建另一个线程并将engine移动到该线程,然后重复所有内容吗?

1 个答案:

答案 0 :(得分:1)

  

线程完成后引擎会发生什么?

对象的作用与移动到线程无关。当你“移动”时你并没有真正的行动,你只是告诉你在一个线程上执行一些代码。该对象将像往常一样被破坏(超出范围或删除分配的堆)。

  

我可以创建另一个线程并将引擎移动到该线程,然后重复   还有一切吗?

是的,只要对象仍然存在。