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)新しいスレッドを作成/実行する理由とその理由を適切に説明するにはどうすればよいですか?
ありがとうございました。