当前位置: 首页 > article >正文

18. Qt系统相关:多线程

一、概述

        在Qt中,使用QThread类对系统线程进行了封装。QThread代表一个在应用程序中可独立控制的线程,也可以和进程中的其他线程共享数据。

二、QThread常用API

三、QThread使用

  1. 自定义一个类,继承自QThread,并且只有一个线程处理函数(和主线程不是同一个线程),这个线程处理函数主要就是重写父类的run函数;
  2. 线程处理函数中实现需要线程执行的逻辑;
  3. 通过类对象调用start()函数启动线程(不能直接调用run函数);
  4. 线程处理函数执行结束后,可以通过自定义信号来通知主线程;
  5. 关闭线程。

注意:

1、除了UI线程外,其他线程内不允许直接操作UI图像界面,可以通过信号槽机制通知UI线程,由UI线程进行统一处理。

2、connect()函数第五个参数表示为信号槽的连接方式,只有在多线程时才有意义。

四、线程安全

Qt中实现线程互斥和同步常用的类有:

  • 互斥锁:QMutex、QMutexLocker
  • 条件变量:QWaitCondition
  • 信号量:QSemaphore
  • 读写锁:QReadLocker、QWriteLocker、QReadWriteLock

4.1 互斥锁

4.1.1 QMutex

        QMutex是Qt框架提供的互斥锁类,用于保护共享资源的访问,实现线程间的互斥操作。

4.2.2 QMutexLocker

        QMutexLocker是QMutex的辅助类,使用RAII方式对互斥锁进行上锁和解锁操作。用于简化互斥锁的上锁解锁操作,避免因忘记解锁导致的死锁等问题。

    {
        QMutexLocker locker(&m_mutex);
        // 访问共享资源
        // 函数作用域结束时,locker自动解锁
    }

4.2 独写锁

4.2.1 QReadWriteLock

        QReadWriteLock是Qt框架提供的读写锁,用于控制独写操作的并发访问。

4.2.2 QReadLocker

        QReadLocker 是RAII风格的读锁管理类,析构时自动解锁;用于读操作上锁,允许多个线程同时读取共享资源。

4.2.3 QWriteLocker

        QWriteLocker 是RAII风格的写锁管理类,析构时自动解锁;用于写操作上锁,只允许一个线程写入共享资源。

4.3 条件变量

        在多线程编程中,假设除了等待操作系统正在执行的线程外,某个线程还必须等待某些条件满足才能执行,这时就会出现问题。这种情况下,线程会很自然的使用锁机制在阻塞其他线程,因为这只是线程的轮流使用,并且该线程等待某些特定条件,人们会认为需要等待的线程在释放互斥锁或读写锁之后进入了睡眠状态,这样其他线程就可以继续运行。当特定条件满足时,等待条件的线程被另一个线程唤醒。

        在Qt中,专门提供了QWaitCondition类来解截上述问题。

        特点:QWaitCondition是Qt框架提供的条件变量类,用于线程间的消息通信和同步。

        用途:在某个条件满足时等待或唤醒线程,用于线程间的同步和协调。

4.4 信号量

        在多线程编程中,有时需要确保多个线程可以相应的访问一个数量有限的相同资源。例如,运行程序的设备可能是非常有限的内存,因此我们更希望需要大量内存的线程将这一情况考虑子啊内,并根据可用的内存数量进行相关操作,多线程编程中类似问题通常使用信号量来处理。

        信号量类似于增强的互斥锁,不仅能完成上锁和解锁操作,而且可以跟踪可用资源的数量。

        特点:QSemaphore是Qt框架中封装用于提供计数信号量的类,用于控制同时访问共享资源的线程数量。

        用途:限制并发线程数量,用于解截一些资源有限的问题。

相关文章:

18. Qt系统相关:多线程

一、概述 在Qt中,使用QThread类对系统线程进行了封装。QThread代表一个在应用程序中可独立控制的线程,也可以和进程中的其他线程共享数据。 二、QThread常用API 三、QThread使用 自定义一个类,继承自QThread,并且只有一个线程处…...

6个月Python学习计划 Day 14 - 异常处理基础( 补充学习)

第二周 Day 8 - Python 函数基础 Day 9 - 函数进阶用法 Day 10 - 模块与标准库入门 Day 11 - 列表推导式、内置函数进阶、模块封装实战 Day 12 - 字符串处理 & 文件路径操作 Day 13 - 文件操作基础 🎯 今日目标 理解异常的概念和常见异常类型掌握 try-except …...

使用jstack排查CPU飙升的问题记录

最近,看到短视频传播了一个使用jstack来协助排查CPU飙升的案例。我也是比较感兴趣,参考了视频博主的流程,自己做了下对应案例的实战演练,在此,想做一下,针对相关问题模拟与排查演练的实战过程记录。 案例中…...

cursor如何开启自动运行模式

在Cursor中,开启自动运行模式即启用“Yolo Mode”,具体操作如下: 按下Ctrl Shift J(Windows/Linux)或Cmd Shift J(Mac)打开Cursor设置。导航到“Features”(功能)选…...

SecureCRT 设置超时自动断开连接时长

我们在使用SecureCRT 连接服务器时,经常性出现2分钟未操作已连接的服务器,就会自动断开连接,此时需要重新连接,非常影响服务器操作,本文可以很好带领大家解决这种问题。...

《复制粘贴的奇迹:原型模式》

📖 背景故事 创业初期,小明每天加班写配送路线、配送策略、营销套餐。可当业务做大后,他发现大家常常下单“上次那个套餐”—— “老板,再来一个上次的奶茶水果!” “老样子,照搬昨天晚上的宵夜套餐&#…...

IEC 61347-1:2015 灯控制装置安全标准详解

IEC 61347-1:2015灯控制装置安全标准详解 IEC 61347-1:2015 是国际电工委员会(IEC)发布的灯控制装置第1部分:通用要求和安全要求的核心标准,为各类照明用电子控制设备设定了全球通用的安全基准。该标准适用于独立式或内置于灯具/…...

Ansys Zemax | 手机镜头设计 - 第 4 部分:用 LS-DYNA 进行冲击性能分析

附件下载 联系工作人员获取附件 该系列文章将讨论智能手机镜头模组设计的挑战,从概念和设计到制造和结构变形分析。本文是四部分系列中的第四部分,它涵盖了相机镜头的显式动态模拟,以及对光学性能的影响。使用 Ansys Mechanical 和 LS - DY…...

[蓝桥杯]实现选择排序

实现选择排序 题目描述 实现选择排序算法。介绍如下: 选择排序的工作原理是每一次从需要排序的数据元素中选出最小的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排列完毕。 请编写代码,完成选择排序,…...

[蓝桥杯]卡片换位

卡片换位 题目描述 你玩过华容道的游戏吗? 这是个类似的,但更简单的游戏。 看下面 3 x 2 的格子 --------- | A | * | * | --------- | B | | * | --------- 在其中放 5 张牌,其中 A 代表关羽,B 代表张飞,* …...

【论文笔记】High-Resolution Representations for Labeling Pixels and Regions

【题目】:High-Resolution Representations for Labeling Pixels and Regions 【引用格式】:Sun K, Zhao Y, Jiang B, et al. High-resolution representations for labeling pixels and regions[J]. arXiv preprint arXiv:1904.04514, 2019. 【网址】…...

【题解-洛谷】P9422 [蓝桥杯 2023 国 B] 合并数列

题目:P9422 [蓝桥杯 2023 国 B] 合并数列 题目描述 小明发现有很多方案可以把一个很大的正整数拆成若干正整数的和。他采取了其中两种方案,分别将他们列为两个数组 { a 1 , a 2 , ⋯ a n } \{a_1, a_2, \cdots a_n\} {a1​,a2​,⋯an​} 和 { b 1 , …...

在MATLAB中,`mean(P_train, 2)` 的含义

在MATLAB中,mean(P_train, 2) 的含义是: 计算矩阵 P_train 中每一行的平均值(沿第2个维度操作)。 详解: mean(A, dim) 函数: 对数组 A 沿维度 dim 求平均值。dim1 → 按列计算(返回行向量&…...

开源模型应用落地-OpenAI Agents SDK-集成Qwen3-8B(一)

一、前言 在人工智能技术迅猛发展的今天,OpenAI Agents SDK 为开发者提供了一个强大的工具集,用于构建基于 Python 的智能代理应用。这些代理可以执行从简单任务到复杂决策的一系列操作,极大地提升了应用程序的智能化水平。 通过 OpenAI Agents SDK,可以利用 Python 编程语…...

109页PPT华为流程模块L1-L4级梳理及研发采购服务资产5级建模

华为的流程体系是其核心竞争力之一,也是其从一家小型民营企业成长为全球领先科技巨头的重要支撑。这套体系的核心思想是以客户为中心、以价值创造为导向、以流程驱动业务、持续优化改进。 下载资料请查看文章中图片右下角信息 以下是华为流程体系的关键组成部分和特…...

第N1周:one-hot编码案例

🍨 本文为🔗365天深度学习训练营中的学习记录博客 🍖 原作者:K同学啊 一、one-hot编码概念 自然语言处理(NLP)中的文本数字化:文字对于计算机来说就仅仅只是一个个符号,计算…...

Windows安装docker desktop

Windows 版本: Windows 10/11(64位)专业版、企业版或教育版(家庭版需手动配置)。 版本号需 ≥ 1909(建议更新到最新系统) 打开程序 启动服务后点点点 重启生效(没有的话 安装WSL…...

Ros(俩不同包的节点 交流 topic message)

不同的俩节点 如chao_node 和ma_node .在俩不同的包下。 他们若想互相产生联系, 就需要靠这个关系了。 想象一下是开黑的场景 其实群名就是topic 而发送的消息就是Message。 其中主动刷屏的message的一方 就是 Publisher 而接受的那一方 就是subsciber...

李沐《动手学深度学习》 | 数值稳定性

文章目录 数值稳定性梯度消失Sigmoid作为激活函数 梯度爆炸 让训练更加稳定合理的权重初始化Xavier初始化(常用)He初始化/Kaiming方法 Batch Normalization Q&A 数值稳定性 当神经网络的深度比较深时,非常容易数值不稳定。 不稳定梯度是…...

OpenCV CUDA模块图像处理------图像连通域标记接口函数connectedComponents()

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 该函数在 GPU 上执行二值图像的连通域标记操作,即将图像中所有相连的前景像素区域赋予相同的标签(label)&…...

Android Studio 打包时遇到了签名报错问题:Invalid keystore format

错误指出密钥库的格式无效,可能是由于密钥库本身的问题导致的,还有一种可能是由于jdk版本导致。我试过重新签名,也是不行,后来发现是JDK版本问题,我的Studio之前是jbr11,好像后来合并代码重新下载编译了项目…...

内存管理【Linux操作系统】

文章目录 简单谈一下物理内存管理页框为什么要把物理内存划分成一个一个固定大小的页框使用?对页框进行描述对页框进行组织管理虚拟地址→物理地址(真实的页表)真实的页表那我们如何把虚拟地址→物理地址呢?页表懒加载时&#xff…...

Go语言学习-->从零开始搭建环境

Go语言学习–>从零开始搭建环境 1 开发环境 Go官网下载地址:https://golang.org/dl/ Go官方镜像站(推荐):https://golang.google.cn/dl/ windos 平台下载: 我这里下载1.22稳定版 双击下载好的.msi文件 修改安装…...

【力扣】3403. 从盒子中找出字典序最大的字符串 I

解法一: class Solution {public String answerString(String word, int numFriends) {//对字符的划分,word长度为n,共有n1个位置可以插入,但是要求被分为非空字符串,所以插入的位置最多为n-1。int n word.length();…...

苹果企业签名撤销

苹果企业签名证书被撤销的原因通常涉及违反苹果的**《Apple Developer Program企业协议》**或相关安全政策,以下是常见原因: ### 一、核心违规原因 1. **证书滥用分发公开应用** * 企业证书仅限**内部员工使用**,若用于以下场景会被撤销&…...

12306高并发计算架构揭秘:Apache Geode 客户端接入与实践

目录 Apache Geode 客户端入门指南 一、安装 Apache Geode 二、启动 Geode 集群 三、Java 客户端接入 Geode Maven 示例依赖 Gradle 示例依赖 Java 示例代码 四、Spring Boot 客户端接入 Geode Maven 配置 Gradle 配置 运行应用 五、Apache Geode 原生客户端 .NET…...

JSON to Excel 3.0.0 版本发布 - 从Excel插件到Web应用的转变

1. 简介 JSON to Excel 3.0.0 是一个重大更新版本,将原有的Excel插件扩展为完整的Web应用。现在您可以直接在浏览器中使用它,无需安装任何插件。所有的转换在浏览器中完成,预览后,可点击下载按钮,导出成xlsx格式文件。…...

【前端】Vue3+elementui+ts,给标签设置样式属性style时,提示type check failed for prop,再次请出DeepSeek来解答

🌹欢迎来到《小5讲堂》🌹 🌹这是《前端》系列文章,每篇文章将以博主理解的角度展开讲解。🌹 🌹温馨提示:博主能力有限,理解水平有限,若有不对之处望指正!&…...

Neo4j 监控全解析:原理、技术、技巧与最佳实践

高效的监控是保障 Neo4j 图数据库性能、稳定性和可观察性的基石。本文将深入探讨 Neo4j 监控的核心原理、关键技术、实用技巧及行业最佳实践,助您构建强大的数据库运维体系。 掌握这些监控技术,将使您的 Neo4j 数据库在稳定性、性能和可维护性上达到企业…...

PyTorch——优化器(9)

优化器根据梯度调整参数,以达到降低误差 import torch.optim import torchvision from torch import nn from torch.nn import Sequential, Conv2d, MaxPool2d, Flatten, Linear from torch.utils.data import DataLoader# 加载CIFAR10测试数据集,设置tr…...