Qt多线程编程—使用Qt自身的线程类

Qt多线程编程—使用Qt自身的线程类

使用Qt自身的线程类进行多线程编程,有两种方法。
**方法1概述:**首先用一个类继承QThread类,然后重新改写QThread类的虚函数run()。只要实例化该类,然后调用函数start(),就可以开启新的多线程(run()会被自动调用),所以线程的具体实现过程放在run()里面。
**方法二概述:**先用一个类继承QObject类,然后在该类中添加一个成员函数working()(名字无所谓)用来处理具体子线程的工作,在主线程调用QObject类提供的moveToThread()方法。

方法1具体步骤

1:需要创建一个线程类的子类,让其继承QT中的线程类 QThread,比如:

class MyThread:public QThread
{
   
    ......
}

2:重写父类的 run() 方法,在该函数内写子线程要处理的具体操作

class MyThread:public QThread
{
   
    ......
 protected:
    void run()
    {
   
        ........
    }
}

3:在主线程中创建子线程对象实例,关键字new

MyThread * subThread = new MyThread;

4:启动子线程, 调用 start() 方法

subThread->start();

方法1实操

这里以一个计数器的小案例为例,创建一个对话框项目,实现主线程和子线程之间的通信,启动线程计数时,右下加的计数器显示开始读秒,点击重置计数器按钮时,读秒数清零后继续计数,点击停止线程按钮时,计数停止。
在这里插入图片描述

(1)新建一个MyThread类,继承QThread
在这里插入图片描述
(2)在MyThread.cpp中重写MyThread类的虚函数run(),这就是子线程实现的具体功能函数
在这里插入图片描述
(3)对ui界面的四个按钮设置对应的槽函数on_pushButton_clicked() - on_pushButton_clicked3(),在需要用到多线程的地方实例化MyThread,当点击按钮“启动线程计数”(按钮1)时,调用MyThread::start()函数,会开启对应的线程,自动运行重写的run()函数。

//dialog.h
#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include "MyThread.h"

QT_BEGIN_NAMESPACE
namespace Ui {
   
class Dialog;
}
QT_END_NAMESPACE

class Dialog : public QDialog
{
   
    Q_OBJECT

public:
    Dialog(QWidget *parent = nullptr)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值