我有一些关于 QThread 的问题和疑问。1) 当我使用 QThread->quit() 时,finished() 信号不会发出。 2) 构建和完成线程执行的正确方法是什么?
1)完成的信号代码——头文件。
#ifndef MYTHREAD_H
#define MYTHREAD_H
#include <QThread>
class MyThread: public QThread
{
Q_OBJECT
public:
explicit MyThread(QObject *parent = 0);
signals:
public slots:
void finished();
protected:
void run();
};
#endif // MYTHREAD_H
1) CPP 文件。
#include "MyThread.h"
MyThread::MyThread(QObject *parent) :
QThread(parent)
{
}
void MyThread::finished()
{
//never gets called...
qDebug() << "Finished.";
}
void MyThread::run()
{
connect(this, SIGNAL(finished()), this, SLOT(finished()), Qt::DirectConnection);
this->exec();
}
我正在用这个构建它:
MyThread *mThread = new MyThread(this); //What does parent do/mean ?
mThread->start();
Sleep(5000); //Windows.
mThread->quit(); //Finish thread.
我什至不明白 Qt::DirectConnection 做了什么,我已经阅读了文档,但我真的不明白如何以及何时使用 Direct/Queued 连接。
刚才想到的另一个问题。
1)我怎样才能完成和清理自己的线程?(我的意思是,线程应该自行退出并进行清理。)
2)如何正确创建/运行新线程的原因以及为什么?
谢谢你。