我有一个简单的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
移动到该线程,然后重复所有内容吗?
答案 0 :(得分:1)
线程完成后引擎会发生什么?
对象的作用与移动到线程无关。当你“移动”时你并没有真正的行动,你只是告诉你在一个线程上执行一些代码。该对象将像往常一样被破坏(超出范围或删除分配的堆)。
我可以创建另一个线程并将引擎移动到该线程,然后重复 还有一切吗?
是的,只要对象仍然存在。