【QT】QT线程

简介: 【QT】QT线程

线程

QT中的QThread提供了与平台无关的线程,一个QThread代表了一个应用程序中可用独立控制的线程,它与进程中的其他线程共享数据,但是是独立执行的,QThread从run()函数开始执行,默认run()通过exec()来开启事件循环,并在线程内运行一个Qt事件循环。

要创建一个线程,需要继承自QThread,并重新实现run()函数。

示例:

#ifndef MYTHREAD_H
#define MYTHREAD_H

#include <QThread>

class MyThread : public QThread
{
    Q_OBJECT
public:
    MyThread(QObject* parent = nullptr);

    void stop();

protected:

    void run() override;//线程启动,执行入口

private:
    bool m_isStopped;
};

#endif // MYTHREAD_H


#include "widget.h"
#include "ui_widget.h"

extern int gPies;

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
}

Widget::~Widget()
{
    delete ui;
}

void Widget::on_startBtn_clicked()
{
    gPies = 0;
    m_MyThread1.start();
}

void Widget::on_stopBtn_clicked()
{
    m_MyThread1.stop();
}

当多个同类型的线程执行时,有可能发生数据错误。

也就是说,

多线程并发执行的时候,共享数据的准确性是不确定的。

QMutex提供了一个互斥锁(mutex),在任何时间至多有一个线程可以获得mutex,如果一个线程尝试获得mutex,而mutex此时已被锁住,则这个线程会睡眠,直到现在获得mutex的线程对mutex解锁为止。互斥锁常用于对共享数据的访问进行保护。

示例:

void MyThread::run()
{
    int i = 0 ;
    while(!m_isStopped && i++ < 200){
        mutex.lock();
       qDebug()<<QString("掉了%1个大饼").arg(++gPies);
        mutex.unlock();
    }
}
相关文章
|
9月前
|
算法 Unix 调度
【Qt 线程】深入探究QThread线程优先级:原理、应用与最佳实践
【Qt 线程】深入探究QThread线程优先级:原理、应用与最佳实践
677 0
|
9月前
|
安全 Java
Qt经典面试题:Qt开启线程的几种方式
Qt经典面试题:Qt开启线程的几种方式
156 0
|
9月前
|
算法 Unix Linux
Linux与Qt线程优先级的对应关系:一次全面解析
Linux与Qt线程优先级的对应关系:一次全面解析
129 0
|
9月前
|
存储 并行计算 安全
【Qt 线程】探索Qt线程编程的奥秘:多角度深入剖析(二)
【Qt 线程】探索Qt线程编程的奥秘:多角度深入剖析
235 0
|
9月前
|
安全 数据处理 C++
【Qt 底层之事件驱动系统】深入理解 Qt 事件机制:主事件循环与工作线程的交互探究,包括 QML 的视角
【Qt 底层之事件驱动系统】深入理解 Qt 事件机制:主事件循环与工作线程的交互探究,包括 QML 的视角
1780 3
|
9月前
|
存储 安全 Java
Qt线程池+生产者消费者模型
Qt线程池+生产者消费者模型
393 5
|
5月前
|
网络协议 安全
QT多线程
本文详细介绍了在Qt中如何正确使用QThread以及信号槽跨线程的使用方式,包括线程的正确退出方法和QObject在不同线程中创建子对象时可能遇到的问题。同时,文章还提供了相关博客和资料的链接,用于进一步学习和参考。
|
5月前
|
数据库 数据库管理
qt对sqlite数据库多线程的操作
本文总结了在Qt中进行SQLite数据库多线程操作时应注意的四个关键问题,包括数据库驱动加载、加锁、数据库的打开与关闭,以及QsqlQuery变量的使用。
310 1
|
5月前
自己动手写QT多线程demo
本文是作者关于如何编写Qt多线程demo的教程,介绍了如何实现多线程功能,包括可暂停和继续的功能。文章提供了部分示例代码,展示了如何创建线程类、启动和管理线程,以及线程间的通信。同时,还提供了相关参考资料和免费下载链接。
134 0
|
7月前
|
调度
【浅入浅出】Qt多线程机制解析:提升程序响应性与并发处理能力
在学习QT线程的时候我们首先要知道的是QT的主线程,也叫GUI线程,意如其名,也就是我们程序的最主要的一个线程,主要负责初始化界面并监听事件循环,并根据事件处理做出界面上的反馈。但是当我们只限于在一个主线程上书写逻辑时碰到了需要一直等待的事件该怎么办?它的加载必定会带着主界面的卡顿,这时候我们就要去使用多线程。
206 6