当前位置:   article > 正文

01_Qt线程-初识QThread_qthread workthead

qthread workthead

Qt线程-初识QThread

QThread

​ Qt有三种线程方式,我这里使用的是,在Qt中继承QThread实现线程的方式,这也是常规的的一种方式。

​ 新建一个类叫WorkThread,并继承QThread,重写Run()函数,将要执行的代码,放在这个类里面。

WorkThread头文件

#ifndef WORKTHREAD_H
#define WORKTHREAD_H

#include <QThread>
#include <QObject>

class WorkThread : public QThread//注意:这里继承QThread
{
    Q_OBJECT
public:
    explicit WorkThread(QObject *parent = nullptr);
 public slots:

public:
    void stop();

protected :
    void run() override;//重写的Run()函数

private:
    int test=0;
    bool m_Stop=false;
};

#endif // WORKTHREAD_H
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

WorkThread源文件

#include "workthread.h"
#include <QDebug>

WorkThread::WorkThread(QObject *parent)
    : QThread{parent}
{
    m_Stop=true;//工作线程实例后,将这个变量赋为true
}

void WorkThread::run()
{
    //线程一直执行
    while (m_Stop)
    {
        qDebug()<<QThread::currentThreadId() <<"Const: "<< ++test;
        sleep(1);
    }

}

void WorkThread::stop()
{
    m_Stop =false;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

MainWindow源文件

void MainWindow::on_butStart_clicked()
{
    workThread = new WorkThread;
    workThread->start();//启动线程
}

void MainWindow::on_butStop_clicked()
{
    //停止线程
    workThread->quit();
    workThread->stop();//设置工作线程m_Stop变量为false,否则程序会一直阻塞
    workThread->wait();
	qDebug()<<workThread->isRunning();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

点击开启按钮的效果,线程开始运行,每间隔1s打印输出一次数字。


点击停止,程序会关闭线程。
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/634554
推荐阅读
相关标签
  

闽ICP备14008679号