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

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_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic: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.mrgr.cn/news/62605.html

相关文章:

  • 微信支付宝小程序SEO优化的四大策略
  • 使用 Kibana 将地理空间数据导入 Elasticsearch 以供 ES|QL 使用
  • 【C语言刷力扣】28.找出字符串中第一个匹配项的下标
  • 【微服务】Nacos 注册中心
  • 建设NFS服务器并实现文件共享
  • JavaScript 中如何识别异步函数?
  • python函数连续
  • ARM base instruction -- adc
  • 2181、合并零之间的节点
  • YOLOv4和Darknet实现坑洼检测
  • 如何成为一名优秀的程序员,进来看看
  • 网络安全不知道怎么学,看完这篇,中学生都能学会
  • iOS 再谈KVC、 KVO
  • 阿里CDN框架
  • 前端实现echarts折线图堆叠(多条折线)
  • Jupyter notebook 添加目录插件
  • 一致校验矩阵计算
  • kdd比赛方案
  • 基于Python的PostgreSQL数据库操作示例(三)
  • 笔记本双系统win10+Ubuntu 20.04 无法调节亮度亲测解决
  • Istio_04_Istio可观测性
  • 一:Linux学习笔记(第一阶段)-- 安装软件 vmware workstation 虚拟机软件 centos系统
  • vue3使用vite设置 @ 路径别名指向src 目录
  • mac-ubuntu虚拟机(扩容-共享-vmtools)
  • 如何预防Kubernetes安全漏洞
  • 如何创建一个网站?