QT:QThread:重写run函数

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

解决:

创建一个集成QThread的类thread

thread.h:

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

stop()函数:线程停止

cpp 复制代码
#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

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:两个按钮的槽函数一个是开启线程一个是关闭线程

cpp 复制代码
#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的安全销毁

cpp 复制代码
#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;

}
相关推荐
小笨猪-3 分钟前
RabbitMQ高级特性
java·开发语言·redis·rabbitmq
神仙别闹17 分钟前
基于 Java 语言双代号网络图自动绘制系统
java·开发语言
猫爪笔记25 分钟前
JAVA基础:单元测试;注解;枚举;网络编程 (学习笔记)
java·开发语言·单元测试
API快乐传递者30 分钟前
用 Python 爬取淘宝商品价格信息时需要注意什么?
java·开发语言·爬虫·python·json
fengbizhe36 分钟前
qt获取本机IP和定位
开发语言·c++·qt·tcp/ip
yang_shengy40 分钟前
【JavaEE】认识进程
java·开发语言·java-ee·进程
无敌最俊朗@1 小时前
unity3d————屏幕坐标,GUI坐标,世界坐标的基础注意点
开发语言·学习·unity·c#·游戏引擎
重生之我是数学王子1 小时前
网络编程 UDP编程 Linux环境 C语言实现
linux·c语言·开发语言·网络·网络协议·udp
何曾参静谧1 小时前
「C/C++」C/C++标准库 之 #include<cstddef> 常用定义和宏
c语言·开发语言·c++
木宇(记得热爱生活)1 小时前
C++ <string> 标头文件详解
开发语言·c++