——–mainwindow.h———————–
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include
#include
#include
#include
#include
#include
QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE
class Work1 ;
class Work2 ;
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
private:
Work1 *worker1;
Work2 *worker2;
QThread workerThread1;
QThread workerThread2;
};
class Work1:public QObject
{
Q_OBJECT
bool isCanRun;
public slots:
void doWork1(void)
{
isCanRun = true;
while (1)
{
if (!isCanRun)
{
break;
}
QThread::sleep(2);
qDebug() << "Work1";
}
}
signals:
void resultemit1();
public :
void stopWork()
{
qDebug()<< "break thread"<
worker1 = new Work1;
worker2 = new Work2;
worker1->moveToThread(&workerThread1);
worker2->moveToThread(&workerThread2);
QObject::connect(&workerThread1, &QThread::started, worker1, &Work1::doWork1);
QObject::connect(&workerThread2, &QThread::started, worker2, &Work2::doWork2);
workerThread1.start();
workerThread2.start();
connect(&workerThread1, SIGNAL(finished()),worker1, SLOT(deleteLater()));
connect(&workerThread1, SIGNAL(finished()),&workerThread1, SLOT(deleteLater()));
connect(&workerThread2, SIGNAL(finished()),worker2, SLOT(deleteLater()));
connect(&workerThread2, SIGNAL(finished()),&workerThread2, SLOT(deleteLater()));
}
MainWindow::~MainWindow()
{
delete ui;
worker1->stopWork();
worker2->stopWork();
workerThread1.quit();
workerThread2.quit();
if (workerThread1.wait(5000)) {
qDebug()<<"thread end"<