先看一个示例:
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"
#include <QDebug>
try_thread::try_thread(QObject *parent) : QThread(parent)
{
}
void try_thread::run()
{
qDebug()<<"son:"<<QThread::currentThreadId();
while(1)
{
int a=1;
a=2;
qDebug()<<a;
}
}
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
qDebug()<<"main:"<<QThread::currentThreadId();
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://www.toymoban.com/news/detail-803043.html
可以使用QThread::currentThreadId();来查看currentThreadId。文章来源地址https://www.toymoban.com/news/detail-803043.html
到了这里,关于Qt多线程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!