当前位置:网站首页>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 .
边栏推荐
- [SQL] SQL expansion languages of mainstream databases (T-SQL, pl/sql, pl/pgsql)
- Go language introduction detailed tutorial (I): go language in the era
- 7.5 装饰器
- GD32F4xx uIP协议栈移植记录
- Hcip course notes-16 VLAN, three-tier architecture, MPLS virtual private line configuration
- Open3D 点云随机添加噪声
- 保研笔记一 软件工程与计算卷二(1-7章)
- Mathematical model Lotka Volterra
- C# 反射与Type
- 【二叉搜索树】增删改查功能代码实现
猜你喜欢
Redis high availability - master-slave replication, sentinel mode, cluster
20.移植Freetype字体库
上门预约服务类的App功能详解
如何获取localStorage中存储的所有值
20220703 周赛:知道秘密的人数-动规(题解)
多普勒效應(多普勒頻移)
My colleagues quietly told me that flying Book notification can still play like this
单商户V4.4,初心未变,实力依旧!
Rasa 3. X learning series -rasa 3.2.1 new release
5. Logistic regression
随机推荐
China Jinmao online electronic signature, accelerating the digitization of real estate business
mysql-全局锁和表锁
JS 这次真的可以禁止常量修改了!
跟着CTF-wiki学pwn——ret2libc1
如何提升口才
Idea connects to MySQL, and it is convenient to paste the URL of the configuration file directly
What if the C disk is not enough? Let's see how I can clean up 25g of temp disk space after I haven't redone the system for 4 years?
Chapter 16 oauth2authorizationrequestredirectwebfilter source code analysis
QT QPushButton details
STM32__06—单通道ADC
20. Migrate freetype font library
GD32F4xx uIP协议栈移植记录
18.(arcgis api for js篇)arcgis api for js点采集(SketchViewModel)
【luogu P3295】萌萌哒(并查集)(倍增)
Hcip course notes-16 VLAN, three-tier architecture, MPLS virtual private line configuration
Russian Foreign Ministry: Japan and South Korea's participation in the NATO summit affects security and stability in Asia
传输层协议------UDP协议
GFS Distributed File System
4 points tell you the advantages of the combination of real-time chat and chat robots
15 MySQL-存储过程与函数