Когда я испускать сигнал MainWindow от 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 работает отлично, но когда он подает сигнал killMe на MainWindow , Класс MainWindow поймать его делает ,, я должен закончить/прекратить newDeviceThread использовать его снова
Любой помощь Оценила, Thankyou
В какой операционной системе? Как работает 'QThread'? У каждого из них есть цикл событий? –
на Linux, у меня нет знаний, что происходит под капотом @BasileStarynkevitch –
Пожалуйста, улучшите свой вопрос, отредактировав его, не комментируйте. –