からの信号をキャッチませんスレッドには、私のコードのthreadWorkerに....いくつかの作業が行われている場合、私はちょうど、スレッドを終了したいと、その後の後、私はそれを再利用する必要があり、 イベントループ内で実行するQMainWindow私はMainThreadがそれをキャッチしていない理由を別のスレッドで実行されているQObjectをからメインウィンドウに信号を発するとき、私はUbuntuの16.04 を使用して、いつかそれがキャッチだけ、その後一度に起こることをしていますQThread
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
class newiDeviceDetect *deviceDetect;
private:
Ui::MainWindow *ui;
public slots:
void on_deviceDetected();
};
class newiDeviceDetect : public QObject
{
Q_OBJECT
public:
explicit newiDeviceDetect(QObject *parent = 0);
QThread *newDeviceThread;
signals:
void killMe();
public slots:
void threadWorker();
};
MainWindow *mainClass;
static void usbHotPlugDetectHand(int sig)
{
qDebug() << "GOT SIGNAL" + QString::number(sig);
emit mainClass->usbHotPlugDetect();
}
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
mainClass = this;
deviceDetect = new newiDeviceDetect;
connect(deviceDetect,SIGNAL(killMe()),this,SLOT(on_deviceDetected()));
signal(SIGUSR1,usbHotPlugDetectHand);
connect(this,SIGNAL(usbHotPlugDetect()),this,SLOT(on_usbHotPlugDetect()));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_usbHotPlugDetect()
{
deviceDetect->threadLock.lock();
deviceDetect->newDeviceThread->start();
}
void MainWindow::on_deviceDetected()
{
deviceDetect->newDeviceThread->terminate();
deviceDetect->newDeviceThread->wait();
deviceDetect->threadLock.unlock();
}
newiDeviceDetect::newiDeviceDetect(QObject *parent) : QObject(parent)
{
newDeviceThread = new QThread;
connect(newDeviceThread,SIGNAL(started()),this,SLOT(threadWorker()));
moveToThread(newDeviceThread);
//Some Work
}
void newiDeviceDetect::threadWorker()
{
sleep(5);
//Some Work
killMe();
}
を続けて取り組んでいますしかし、それがMainWindowにkillMeを通知するとき、メインウィンドウクラスはそれをキャッチdoest ,,私は、newDeviceThreadは
おくるどれヘルプ再びそれを使用するためにありがとう
あなたが作成するすべての新しいスレッドのための信号を接続する必要があり
どのオペレーティングシステムでですか? 'QThread'はどのように動いていますか?それぞれにイベントループがありますか? Linux上で –
、私は多くの知識を持っていない何がボンネットの下で起こっている@BasileStarynkevitch –
あなたの質問を編集して、コメントしないでください。 –