QT 子线程两种创建方式

本文介绍了在Qt中创建线程的两种方法:一是继承QThread并重写run()函数,二是继承QObject并使用slots。在第一种方式中,run()函数是新线程的入口,通过start()启动。而在第二种方式中,通过connect将runThread()槽函数与线程的started()信号关联,然后将对象移动到线程中。注意,这两种方法都未涉及线程安全和内存管理等细节问题。
摘要由CSDN通过智能技术生成

第一种:继承QThread

#ifndef THREADFROMQTHREAD_H
#define THREADFROMQTHREAD_H

#include <QThread>
#include <QObject>

class ThreadFromQThread : public QThread
{
    Q_OBJECT
public:
    ThreadFromQThread();
    
protected:
  void run();
};

#endif // THREADFROMQTHREAD_H
#include "threadfromqthread.h"

ThreadFromQThread::ThreadFromQThread()
{

}

void ThreadFromQThread::run()
{

}

 实现:

ThreadFromQThread* myThread = new ThreadFromQThread;
myThread.start();

注意:

  • 只有run函数是在新线程中,必须重写QThreadrun()函数
  • run()是线程执行的入口,通过start()函数来实现调用的。

第二种:继承QObject

#ifndef THREADFROMQOBJECT_H
#define THREADFROMQOBJECT_H

#include <QObject>

class ThreadFromQObject : public QObject
{
    Q_OBJECT
public:
    explicit ThreadFromQObject(QObject *parent = nullptr);

public slots:
    void runThread();
signals:

};

#endif // THREADFROMQOBJECT_H

#include "threadfromqobject.h"

ThreadFromQObject::ThreadFromQObject(QObject *parent) : QObject(parent)
{
    
}

void ThreadFromQObject::runThread()
{
    
}

实现:

QThread * thread = new QThread;
ThreadFromQObject * myWork = new ThreadFromQObject();

connect(thread, SIGNAL(started()), myWork , SLOT(runThread()));

myWork ->moveToThread(thread);
thread->start();

注意:

  • 声明的槽函数作为线程执行的入口,通过connect建立连接,放入线程执行

本文只涉及建立线程,未涉及线程安全和内存泄漏等问题(见后续章节)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值