[Qt]创建线程

——–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"<setupUi(this);

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"<

发表评论

邮箱地址不会被公开。 必填项已用*标注