Qt多线程

发布时间:2024年01月15日

先看一个示例:

void Widget::on_pushButton_clicked()
{
    while(1)
    {
        int a=1;
        a=2;
    }
}

点击pushbutton后:

程序无响应啦。因为一直都在进行那个死循环。

推广一下场景:某个操作的计算量特别大,会耗时很久,如果在主线程中进行计算,页面会卡住,这时候就需要用到多线程啦。

参考:

Qt中多线程写法一(步骤讲解+代码+加演示)_qt实训多线程-CSDN博客

#ifndef TRY_THREAD_H
#define TRY_THREAD_H

#include <QObject>
#include <QThread>
class try_thread : public QThread
{
    Q_OBJECT
public:
    explicit try_thread(QObject *parent = nullptr);
protected:
    void run();
};

#endif // TRY_THREAD_H
#include "try_thread.h"

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

}
void try_thread::run()
{
    while(1)
    {
        int a=1;
        a=2;
        qDebug()<<a;
    }
}
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    connect(this,SIGNAL(destroyed()),this,SLOT(quitThreadSlot()));
}
void Widget::on_pushButton_clicked()
{
    t=new try_thread(this);
    t->start();
}

void Widget::quitThreadSlot()
{
    t->quit();
    t->wait();
}

这样写页面就不会卡顿啦! 那个耗时的死循环在子线程中执行啦!

(要注意子线程的退出,销毁)

文章来源:https://blog.csdn.net/weixin_51883798/article/details/135597900
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。