Qt开启多线程QThread

使用Qt多线程

使用示例: https://www.cnblogs.com/mc-r/p/15839540.html

  1. 在项目中添加 QObject类。
  2. 使用信号与槽控制开关。

使用QThread创建线程是我们最常见的一种方式,步骤如下:

  1. 继承QThread
  2. 重写run()函数
  3. 通过start()函数启动线程
  4. 优点:可以通过信号槽与外界进行通信。
  5. 缺点:①每次新建一个线程都需要继承QThread,实现一个新类,使用不太方便。②要自己进行资源管理,线程释放和删除。并且频繁的创建和释放会带来比较大的内存开销。
    适用场景:QThread适用于那些常驻内存的任务。

示例:

 # 第一步, 添加一个 C++ 类
头文件
#ifndef MYTHREAD_H
#define MYTHREAD_H

#include <QThread>

class myThread : public QThread
    Q_OBJECT
public:
    explicit myThread(QObject *parent = nullptr);

protected:
    void run() override;  // 重写这个函数
	
signals:

};

#endif // MYTHREAD_H

cpp文件

#include "mythread.h"

myThread::myThread(QObject *parent) : QThread(parent)
{

}
// 重写run() 这个虚函数
void myThread::run()
{
    cout << "这是一个新线程:" << QThread::currentThreadId();
    tm = new QTimer();
    tm->start(100);
    connect(tm, &QTimer::timeout, this, [=]()
    {
        emit sendV(t1);
    });
    
}

main.cpp 入口文件

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

 connect(mt1, &myThread::sendV,this,[=](int i)mutable
{
         ui->label->setText(QString("这个数是: %1").arg(i));
});
th->start();
th->quit();
th->wait();

delete th;

参考:https://blog.csdn.net/luoyayun361/article/details/97150788

posted @ 2020-03-03 14:00  看不见的R  阅读(745)  评论(0编辑  收藏  举报