Qt两种线程的创建

想要看的了解更多的,路径:Qt中多线程的使用 | 爱编程的大丙。这里我简单的记录一下。

1、继承QThread类

第一步:创建类继承QThread,并重写run方法

在run里面写运行的逻辑

class pthreadTst : public QThread
{
    Q_OBJECT
   public:
       explicit pthreadTst(QObject *parent = nullptr);
   protected:
       void run();
   signals:
       // 自定义信号, 传递数据
       void XXX(int num);
   public slots:
};

第二步:在主线程中创建子线程,并启动

pthreadTst* subThread = new pthreadTst;
subThread->start();

为什么运行start()而不是run()?

这是因为在QThread的设计中,run()方法是在新线程中运行的,而start()方法则是在主线程中启动新线程的函数。

调用start()方法会执行以下步骤:

  1. 创建一个新的线程。
  2. 在新线程中执行run()方法。
  3. 将新线程和QThread对象进行关联,使得QThread对象能够管理新线程的生命周期。

2、将对象移动到子线程中运行

第一步:创建一个类继承QObject,并使用public写对应的逻辑

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

    // 工作函数
    void working();

signals:
    void curNumber(int num);

public slots:
};

第二步:在主线程中创建子线程和类对象,将对象移动到子线程里面去

QThread* sub = new QThread;
//MyWork* work = new MyWork(this);  //千万不要指定给创建的对象指定父对象
MyWork* work = new MyWork;
work->moveToThread(sub);	// 移动到子线程中工作

第三步:启动子线程,并寻找时机启动对象在子线程中工作

sub->start();
// 让工作的对象开始工作, 点击开始按钮, 开始工作
connect(ui->startBtn, &QPushButton::clicked, work, &MyWork::working);
// 显示数据
connect(work, &MyWork::curNumber, this, [=](int num)
{
   ui->label->setNum(num);
});
  • 8
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值