QT实现多线程的方法

目录

一、继承QThread类

1)自定义线程类

2)使用自定义的子线程类

3)使用说明

二、利用QThread的消息循环

1)自定义执行类

2)启动子线程

3)方法说明 

三、使用线程池

四、方法比较


        QT多线程编程常见的有3种实现方法,一种是继承QThread类,一种是利用QThread的消息循环,还有一种是使用线程池。这三种方式在不同的场景下各有优势,下面对三种实现方法进行详细说明。

一、继承QThread类

        直接继承QTread类是进行多线程编程最常用的一种方式。我们只需要定义一个自己的类,并继承自QThread即可。具体实现如下所示。

1)自定义线程类

        首先我们在头文件中自定义一个类MyThread,在类中定义好构造函数、析构函数和run函数。run函数必须要重写,用于实现子线程需要完成的工作。当子线程启动时,将直接执行run函数中的代码,也只有run函数中的代码是在子线程中执行的。在我们自定义的MyThread类中,我们同样可以定义公共函数,比如setPara(),用于在启动子线程之前,为子线程对象设置参数信息。同时也可以定义信号,用于子线程向外传递参数。在类MyThread的对象中,虽然run函数中的代码运行在子线程中,但run函数依然可以访问对象中的各类成员。但当run函数访问对象中的公有成员时,若创建该子线程对象的线程也需要访问该公有成员,则可能会存在访问冲突的问题,这需要在具体实现时加以注意,避免多个线程同时访问同一内存。

       类MyThread的CPP文件实现不再赘述,与所有类的实现一样。

mythread.h头文件

#ifndef MYTHREAD_H
#define MYTHREAD_H

#include <QThread>
#include <QObject>

class MyThread : public QThread
{
    Q_OBJECT
public:
    MyThread (QObject *parent = nullptr);
    ~MyThread ();
protected:
    void run();//重写该函数,实现子线程需要完成的工作
private:
    int a,b,c;
public:
    void setPara(int,int,int);
signals:
    void sendValue(int);
};
#endif // MYTHREAD_H

2)使用自定义的子线程类

       使用继承自QThread的类也非常简单。首先在我们需要使用的地方,包含自定义类的头文件mythread.h,然后使用该类实例化一个对象,在启动线程前,可以调用该对象的公有函数设置一些参数,最后调用对象的start()函数启动线程。如果需要从子线程中传递出参数,则可以使用信号和槽将子线程对象的信号与当前的槽函数连接。

3)使用说明

        需要指出的是,调用对象的start()函数后,将默认自动执行run

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

琳琳简单点

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值