0
捕獲信號
當我發出信號,從它在不同的線程運行的QObject到主窗口爲什麼MainThread不抓住它,我使用Ubuntu 16.04 某個時候趕上但在此之後,僅出現一次螺紋繼續在事件循環中運行, 我只是想完成線程,如果有些工作就完成了,然後後,我不得不重用....的QMainWindow不是從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();
}
在我的代碼threadWorker工作很好,但是當它向MainWindow發送killMe信號時,MainWindow類行的也趕上吧,,我必須完成/終止newDeviceThread再次使用它
知道的任何幫助,三江源
在哪個操作系統? 「QThread」如何運行?他們每個人都有其事件循環? –
在Linux上,我沒有太多的知識什麼是在引擎蓋下@BasileStarynkevitch –
請改善您的問題,編輯它,不要評論它。 –