当前位置:网站首页>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 .
边栏推荐
- Rsync remote synchronization
- GFS分布式文件系統
- Tips for using pads router
- SpreadJS 15.1 CN 与 SpreadJS 15.1 EN
- C # input how many cards are there in each of the four colors.
- Go language introduction detailed tutorial (I): go language in the era
- CAS and synchronized knowledge
- Breadth first search open turntable lock
- 4点告诉你实时聊天与聊天机器人组合的优势
- Rasa 3. X learning series -rasa 3.2.1 new release
猜你喜欢
The use of El cascader and the solution of error reporting
微信小程序---WXML 模板语法(附带笔记文档)
orgchart. JS organization chart, presenting structural data in an elegant way
What are Yunna's fixed asset management systems?
Rasa 3.x 学习系列-Rasa X 社区版(免费版) 更改
保研笔记四 软件工程与计算卷二(8-12章)
Research notes I software engineering and calculation volume II (Chapter 1-7)
总结了 800多个 Kubectl 别名,再也不怕记不住命令了!
Initialize your vector & initializer with a list_ List introduction
Go language introduction detailed tutorial (I): go language in the era
随机推荐
Rasa 3. X learning series -rasa x Community Edition (Free Edition) changes
Part III Verilog enterprise real topic of "Niuke brush Verilog"
[day39 literature extensive reading] a Bayesian perspective on magnetic estimation
【EF Core】EF Core与C# 数据类型映射关系
GFS分布式文件系統
Use CAS instead of synchronized
Research notes I software engineering and calculation volume II (Chapter 1-7)
shardingsphere源码解析
rsync远程同步
20220703 周赛:知道秘密的人数-动规(题解)
[online chat] the original wechat applet can also reply to Facebook homepage messages!
Cloudcompare & PCL point cloud randomly adds noise
GFS分布式文件系统
Huawei simulator ENSP - hcip - MPLS experiment
GFS Distributed File System
【二叉搜索树】增删改查功能代码实现
关于结构体所占内存大小知识
QT QPushButton details
Rsync remote synchronization
Open source CRM customer relationship system management system source code, free sharing