当前位置:网站首页>QT -- thread
QT -- thread
2022-07-05 23:55:00 【I have a mint candy】
Tips : This is the learning record , If there is an error , Please contact the author , Modest and educated .
List of articles
Preface
Find a partner like the sun , It's worth nothing to help you dry everything .
One 、QT Operation thread
1、 By inheritance QThread class , rewrite QThread Class run function , control Run Function to operate a new thread .
2、 By inheritance QObject class , Write the thread operation function in the new class , adopt movetothread() Function to transfer the newly created class to a new thread .
Two 、 Inherit QThread, rewrite run()
1.mythread class
mythread.h file
#ifndef MYTHREAD_H
#define MYTHREAD_H
#include <QThread>
#include <QDebug>
class MyThread : public QThread
{
public:
explicit MyThread(){
}
private:
void run() override;
private slots:
void sig_ShowMsg(QString,bool);
#endif // MYTHREAD_H
mythread.cpp file
void MyThread::run()
{
// Execution of complex functions
emit sig_ShowMsg(" Send successfully ",true);
}
2.mainwindow
mainwindow.h file
// Define the thread
MyThread* m_thread;
signals:
void slt_ShowMsg(QString ,bool );
mainwindow.cpp file
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
// Declaration thread
m_thread = new MyThread;
// The two are connected with the slot through signals
connect(&m_thread,SIGNAL(sig_ShowMsg(QString,bool)),SLOT(slt_ShowMsg(QString ,bool )));
}
// Trigger the thread to start through the button
void MainWindow::on_btnstart_clicked()
{
thread->start();// When using this function, it will automatically call run function
qDebug()<<"main thread: "<< QThread::currentThreadId();
emit sig_start();
}
// Stop the thread through the button
void MainWindow::on_btnclose_clicked()
{
// End thread
thread->exit();
thread->deleteLater();
emit sig_Close();
}
void MainWindoe::slt_ShowMsg(QString a,bool b)
{
ui->text->setText("a");
}
The connection between the main thread and the sub thread is through the signal and slot .
Tips : Only in Run The content of the function is in the new thread , Other functions are in old threads .
3、 ... and 、 Inherit QObject, adopt moveToThread()
1.MyObject class
// Thread processing object
#ifndef MYOBJECT_H
#define MYOBJECT_H
#include <QObject>
#include <QThread>
#include <QDebug>
class MyObject : public QObject
{
Q_OBJECT
public:
explicit MyObject(QObject *parent = 0): QObject(parent){
}
~MyObject(){
}
private slots:
void Start()// Thread handler
{
qDebug()<<"obj thread: "<<QThread::currentThreadId();
}
};
#endif // MYOBJECT_H
stay Mainwindow When used in ,
// Defining variables
MyObject* obj;
QThread* thread;
// Start thread
obj = new MyObject;// Thread execution object
thread = new QThread;
obj->moveToThread(thread);// Move the object to the newly created thread
connect(thread, &QThread::started, obj, &MyObject::Start);// Bind the start signal of the thread , After the thread starts, it will execute obj Of Start Slot function
thread->start();
qDebug()<<"main thread: "<<QThread::currentThreadId();
// End thread
thread->exit();
thread->deleteLater();// Delete object
obj->deleteLater();
Use QObject Methods
- Write an inheritance QObject Class , Declare the entry function requiring complex and time-consuming logic as slot function .
- This class is in the old thread new come out , You can't set any parent to it
- Also declare a QThread, If not new, When destructing, you need to call QThread::wait(), If it's heap allocation , Can pass deleteLater Let the thread destroy automatically .
- hold obj adopt moveToThread Method to the new thread , here object Already in the thread .
- Put the thread of finished Signals and object Of deleteLater Slot connection , This signal slot must be connected to , Otherwise, there will be a memory leak .
- Connect other signals and slots normally , Communicate through signals and slots .
- After the initialization, it is called QThread::start() To start a thread
- At the end of the logic , call QThread::quit Exit the thread's event loop
Use QObject To implement multithreading rather than inheritance QThread The method is more flexible , The whole class is in the new thread , Pass data through the signal slot and the main thread
Four 、 Destruction of the thread
connect(&m_thread,&QThread::finished ,&obj,&QObject::deleteLater);
Make a statement QThread, If not new, When destructing, you need to call QThread::wait(),
If it's heap allocation , Can pass deleteLater Let the thread destroy automatically .
( The heap needs to be destroyed manually by the programmer )
Insert :
Decimal display :
QString test = QString::number(rcvBuf3[5]*256 +rcvBuf3[6]);
QString data = QString::number(rcvBuf3[5]<<8 | rcvBuf3[6]);
summary
Good at summarizing , More further .
边栏推荐
- Open source CRM customer relationship system management system source code, free sharing
- 5. Logistic regression
- wx.getLocation(Object object)申请方法,最新版
- 教你在HbuilderX上使用模拟器运行uni-app,良心教学!!!
- 21.PWM应用编程
- 同事悄悄告诉我,飞书通知还能这样玩
- What are the functions of Yunna fixed assets management system?
- Why use weak pointers for delegation- Why use weak pointer for delegation?
- Bao Yan notes II software engineering and calculation volume II (Chapter 13-16)
- 保研笔记一 软件工程与计算卷二(1-7章)
猜你喜欢
随机推荐
Zhongjun group launched electronic contracts to accelerate the digital development of real estate enterprises
【GYM 102832H】【模板】Combination Lock(二分图博弈)
C# 文件与文件夹操作
Qt QPushButton详解
Single merchant v4.4 has the same original intention and strength!
Bao Yan notebook IV software engineering and calculation volume II (Chapter 8-12)
[Luogu cf487e] tours (square tree) (tree chain dissection) (line segment tree)
保研笔记四 软件工程与计算卷二(8-12章)
Use mapper: --- tkmapper
保研笔记一 软件工程与计算卷二(1-7章)
14 MySQL view
【luogu P3295】萌萌哒(并查集)(倍增)
Senparc.Weixin.Sample.MP源码剖析
Research notes I software engineering and calculation volume II (Chapter 1-7)
[EF core] mapping relationship between EF core and C data type
【QT】Qt使用QJson生成json文件并保存
用列錶初始化你的vector&&initializer_list簡介
2022.6.20-6.26 AI industry weekly (issue 103): new little life
5. Logistic regression
Cwaitabletimer timer, used to create timer object access









