打工人日报#20250921
打工人日报#20250921
知识点
在 MainWindow 类中启动和停止 MyTask 任务
MyTasksport.h
#ifndef MYTASKSPORT_H
#define MYTASKSPORT_H#include <QRunnable>
// 前向声明MainWindow类
class MainWindow;class MyTask : public QRunnable
{
public:MyTask(MainWindow* mainWindow);void run() override;void setStopFlag(bool shouldStop);private:MainWindow* m_mainWindow;bool m_shouldStop;
};#endif // MYTASKSPORT_H
MyTasksport.cpp
#include "MyTasksport.h"
#include "mainwindow.h"
#include <QDebug>
#include <QThread>MyTask::MyTask(MainWindow* mainWindow) : m_mainWindow(mainWindow), m_shouldStop(false)
{
}void MyTask::run()
{while (!m_shouldStop) {for (int i = 0; i < 10; ++i) {if (m_shouldStop) {break;}qDebug() << "Task is running: " << i;QThread::sleep(1);}}
}void MyTask::setStopFlag(bool shouldStop)
{m_shouldStop = shouldStop;
}
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QList>// 前向声明MyTask类
class MyTask;QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:void on_Sports_clicked();private:Ui::MainWindow *ui;int Sportssta;QList<MyTask*> runningTasks;
};#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "MyTasksport.h"
#include <QThreadPool>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow), Sportssta(0)
{ui->setupUi(this);connect(ui->SportsButton, &QPushButton::clicked, this, &MainWindow::on_Sports_clicked);
}MainWindow::~MainWindow()
{// 清理所有正在运行的任务foreach (MyTask* task, runningTasks) {task->setStopFlag(true);delete task;}delete ui;
}void MainWindow::on_Sports_clicked()
{if (Sportssta == 0){Sportssta = 1;MyTask* task = new MyTask(this);runningTasks.append(task);QThreadPool::globalInstance()->start(task);}else if (Sportssta == 1){Sportssta = 0;// 结束线程foreach (MyTask* task, runningTasks) {task->setStopFlag(true);}runningTasks.clear();}qDebug() << "Sportssta = " << Sportssta;
}
阅读
《小米创业思考》
第十二章 生态链模式