当前位置:网站首页>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 .
边栏推荐
- Chapter 16 oauth2authorizationrequestredirectwebfilter source code analysis
- 零犀科技携手集智俱乐部:“因果派”论坛成功举办,“因果革命”带来下一代可信AI
- 时区的区别及go语言的time库
- Research notes I software engineering and calculation volume II (Chapter 1-7)
- Redis high availability - master-slave replication, sentinel mode, cluster
- Rsync remote synchronization
- mysql-全局锁和表锁
- 激光slam学习记录
- [EF core] mapping relationship between EF core and C data type
- Effet Doppler (déplacement de fréquence Doppler)
猜你喜欢
Senparc.Weixin.Sample.MP源码剖析
Rasa 3. X learning series -rasa x Community Edition (Free Edition) changes
How to rotate the synchronized / refreshed icon (EL icon refresh)
JVM details
PV静态创建和动态创建
Zero rhino technology joined hands with the intelligence Club: the "causal faction" forum was successfully held, and the "causal revolution" brought the next generation of trusted AI
Spire. PDF for NET 8.7.2
STM32__06—单通道ADC
GFS Distributed File System
Fiddler Everywhere 3.2.1 Crack
随机推荐
Problem solving win10 quickly open ipynb file
Doppler effect (Doppler shift)
mysql-全局锁和表锁
用列錶初始化你的vector&&initializer_list簡介
20220703 week race: number of people who know the secret - dynamic rules (problem solution)
多普勒效应(多普勒频移)
In C#, why can't I modify the member of a value type instance in a foreach loop?
Idea connects to MySQL, and it is convenient to paste the URL of the configuration file directly
Bao Yan notebook IV software engineering and calculation volume II (Chapter 8-12)
Use mapper: --- tkmapper
20220703 周赛:知道秘密的人数-动规(题解)
GFS distributed file system
如何提升口才
XML configuration file (DTD detailed explanation)
PV静态创建和动态创建
QT QPushButton details
What is a humble but profitable sideline?
Miaochai Weekly - 8
5. Logistic regression
[day39 literature extensive reading] a Bayesian perspective on magnetic estimation