当前位置: 首页 > article >正文

QT:QThread:重写run函数

 

问题描述:QThread的使用方法2重写run函数

解决:

创建一个集成QThread的类thread

thread.h:

run()函数则是新线程的入口,run()函数退出意味着线程的退出。

stop()函数:线程停止

#ifndef THREAD_H
#define THREAD_H
#include <QThread>
#include <iostream>
#include <QDebug>

class thread: public QThread
{
    Q_OBJECT
public:
    thread();
    void stop();

protected:
    void run();

    void printMessage();

private:
    volatile bool stopped;


};

#endif // THREAD_H

thread.cpp

#include "thread.h"
#include <QDebug>
thread::thread()
{

    stopped =false;

}
void thread::run()
{
    qDebug() << "子线程id:" << QThread::currentThreadId();
    while(!stopped)
    {
        printMessage();
    }
    stopped = false;
}

void thread::stop()
{
    qDebug()<<"进程已经停止";
    stopped = true;
}

void thread::printMessage()
{
    qDebug()<< "hello";
    usleep(5);
}

mainwindow.h:两个按钮的槽函数一个是开启线程一个是关闭线程

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QThread>
#include <iostream>
#include <QDebug>
#include <QMainWindow>
#include <QCloseEvent>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    void on_pushButton_clicked();

    void on_pushButton_2_clicked();


private:
    Ui::MainWindow *ui;
protected:
    void closeEvent(QCloseEvent *event);
};
#endif // MAINWINDOW_H

mainwindow.cpp:

closeEvent:QThread的安全销毁

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "thread.h"
thread  myThread;
//thread  myThread1;
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    qDebug() << "主线程id:" << QThread::currentThreadId();

}
//关闭线程
void MainWindow::on_pushButton_clicked()
{
    myThread.stop();

}
//开启线程

void MainWindow::on_pushButton_2_clicked()
{
    myThread.start();
}
void MainWindow::closeEvent(QCloseEvent *event)
{
    myThread.stop();
    myThread.wait();
    event->accept();
}


MainWindow::~MainWindow()
{
    delete ui;

}




http://www.kler.cn/a/380370.html

相关文章:

  • Openlayers高级交互(18/20):根据feature,将图形适配到最可视化窗口
  • 【CSS】——基础入门常见操作
  • 【折腾一上午】Java POI 导出 Excel 自适应列宽行高
  • 算法|牛客网华为机试21-30C++
  • 服务器作业(2)
  • 使用JdbcTemplate 进行数据库的增、删、改、查
  • HarmonyOS:UIAbility组件概述
  • k8s 上如何跑 Dolphins 模型
  • CentOS一次性安装 Nginx 的脚本指南
  • MySQL45讲 第十一讲 怎么给字符串字段加索引?
  • TCP建立连接之后怎么保持长连接(检测连接断没断)
  • 面试准备第一版ssm spring-springmvc
  • Swift 开发教程系列 - 第1章:Swift 简介与开发环境配置
  • Ubuntu下网络抓包工具:Wireshark与Tcpdump实例解析
  • 科技 | 谷歌 AI 生成代码争议
  • mysql到doris的DDL整库转换工具
  • Nop平台与APIJSON的功能对比
  • 国际化教育品牌的人力资源管理利器
  • CVE-2024-51567 CyberPanel upgrademysqlstatus 远程命令执行
  • JavaEE初阶-----servlet-api,Maven创建项目,部署,打包,测试全过程
  • 分类模型onnx推理,并生成混淆矩阵
  • 如何在本地Linux服务器搭建WordPress网站结合内网穿透随时随地可访问
  • 使用 Python 中的 pydub实现 M4A 转 MP3 转换器
  • element-plus按需引入报错IconsResolver is not a function
  • 经纬恒润车载TSN网络测试仪TestBase-ATT全新上线!
  • C#、C和C++的主要区别