Qt 多线程QThread的四种形式

重点:

1.互斥量:QMutex配套使用,lock(),unlock(),如果一个线程准备读取另一个线程数据时候采用tryLock()去锁定互斥量,保证数据完整性。

QMutexLocker简化版的QMutex,在范围区域内使用。

QMutex mutex
QMutexLocker locker(&mutex);

2.读写锁:QReadWriteLock配套使用,lockForWrite(),lockForRead(),它允许多个线程以只读方式同步访问资源,但只要有一个线程以写入方式访问资源,其他线程就必须等待,直到写操作完成。QReadLocker和QWriteLocker是简化版的QReadWriteLock,

QReadWriteLock mutex;
QReadLocker locker(&mutex);
QWriteLocker locker(&mutex);

3.基于条件等待的线程同步:QWaitCondition通过与QMutex或者QReadWriteLock结合使用。

通过wakeAll()和wait()方法处理。 一旦读完一个数据,就通过wakeAll()唤醒等待的线程。

这里需要注意线程中传值的时候,在主线程和子线程中,通过信号与槽发送QString,遇到
QObject::connect: Cannot queue arguments of type 'QString&'问题

原因

不允许跨线程传递非const应用。

解决方法

就是要么是const引用,要么是值传递

4.基于信号量的线程同步:QSemaphore是一种限制对共享资源进行访问的ITC技术。互斥量只能被锁定一次,而信号量可以用多次。互斥量相当于列车上的卫生间,一次只能一个人使用,信号量则是多人公共厕所。n个资源就是信号量要保护的资源,资源怎么分配,看内部处理。

需要特别注意的是,两个线程之间因为两个信号量存在耦合,在线程结束不要使用threadA->terminate();   //强制结束线程

 if (threadA->isRunning())
    {
        threadA->terminate();   //强制结束线程
        threadA->wait();        //等待线程结束
    }

而要使用,否则重新启动线程会出问题。

 if (threadDAQ->isRunning())
        threadDAQ->stopThread();   //结束线程

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/497083.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

达梦数据库新手上路排坑

数据库安装 这个没啥说的,按照官网教程操作,我使用的是docker进行安装 下载文件docker文件 官方下载地址- load -i dm8****.tar (注意修改为当前下载的文件)达梦官方文档注意修改为当前版本 docker run -d -p 5236:5236 --name dm8 --privilegedtrue -…

程序员口才提升技巧:从技术到沟通的进阶之路

程序员口才提升技巧:从技术到沟通的进阶之路 在数字化时代,程序员作为推动技术发展的关键角色,其专业能力的重要性不言而喻。然而,除了编程技能外,良好的口才同样是程序员职业生涯中不可或缺的一部分。本文将探讨程序…

学透Spring Boot — [二] Spring 和 Spring Boot的比较

欢迎关注我们的专栏 学透 Spring Boot 一、创建一个简单Web应用 本篇文章,我们将会比较 Spring 框架和 Spring Boot 的区别。 什么是 Spring? 也许你在项目中已经可以很熟练的使用 Spring 了,但是当被问到这个问题时,会不会犹豫一下&#…

2024-3-28 市场情绪强修复

这一轮退潮负反馈都修复了, 艾艾精工 博信股份 安奈尔 永悦科技 大理药业 ,高新发展 也补跌了,收尸队也干活了,情绪不修复不接力得最好写照。这轮周期 宁科生物 已经7板,已经追平了 博信股份7板,看明天溢…

永磁同步电机速度环滑膜控制(SMC)

文章目录 1、前言2、滑膜控制基本原理2.1 滑膜控制的定义2.2 趋近率 3、滑膜控制器的设计与参数4、二阶滑膜速度控制器的设计5、二阶速度环滑膜控制仿真5.1 模型总览5.2 电机及系统参数5.3 滑膜控制模块5.4 控制效果对比 参考 写在前面:本人能力、时间、技术有限&am…

广场舞团系统的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)

本项目包含可运行源码数据库LW,文末可获取本项目的所有资料。 推荐阅读100套最新项目持续更新中..... 2024年计算机毕业论文(设计)学生选题参考合集推荐收藏(包含Springboot、jsp、ssmvue等技术项目合集) 目录 1. 系…

明天线上见!DPU构建高性能云算力底座——DPU技术开放日最新议程公布!

算力,是数字经济时代的新质生产力。随着人工智能、智算中心建设等需求不断拓展,DPU在各行各业数据中心的应用逐步深入。异构算力代表DPU在新质生产力建设中,能否给出别开生面的答案,应战算力难题?DPU技术在不同行业中的…

详细解析记忆泊车的顶层技术原理

详细解析记忆泊车的顶层技术原理 附赠自动驾驶学习资料和量产经验:链接 相对于记忆行车而言,记忆泊车 MPA(Memory Parking Assist)可以看成是停车场区域内的一个自动驾驶功能,可帮助用户按记忆的路线自动巡航并泊入车…

Vue2 与 Vue3的面试题

1.Promise有几种状态 pending(进行中) fulfilled(已成功) rejected(已失败) data(){return{}},create(){const result this.ganaretor()result.next.value.then((res)>{console.log(res);}) // 解决一直.then()方法问题},methods:{* ganaretor(){yield axios.get(httpts)…

vulnhub靶场之driftingblues-3

一.环境搭建 1.靶场描述 get flags difficulty: easy about vm: tested and exported from virtualbox. dhcp and nested vtx/amdv enabled. you can contact me by email for troubleshooting or questions. This works better with VirtualBox rather than VMware 2.靶场…

【前端面试3+1】01闭包、跨域、路由模式

一、对闭包的理解 定义: 闭包是指在一个函数内部定义的函数,并且该内部函数可以访问外部函数的变量。闭包使得函数内部的变量在函数执行完后仍然可以被访问和操作。 特点: 闭包可以访问外部函数的变量,即使外部函数已经执行完毕。…

天锐绿盾|公司如何防止员工拷贝电脑资料?

#天锐绿盾# 天锐绿盾是一款针对企业数据安全设计的终端安全管理软件,用来防止员工拷贝电脑资料的具体措施包括: www.drhchina.com PC地址: https://isite.baidu.com/site/wjz012xr/2eae091d-1b97-4276-90bc-6757c5dfedee 1. **文件透明加密…

10.对象的使用,遍历

什么是对象 其实就是map那种键值对的存储形式&#xff0c;别的语言也有&#xff0c;老规矩&#xff0c;和别的语言差不多的就在给pink老师打一波广告。 常见的对象操作&#xff0c;其实没啥直接上代码吧 <!DOCTYPE html> <html> <head><meta charset&…

网络套接字补充——UDP网络编程

五、UDP网络编程 ​ 1.对于服务器使用智能指针维护生命周期&#xff1b;2.创建UDP套接字&#xff1b;3.绑定端口号&#xff0c;包括设置服务器端口号和IP地址&#xff0c;端口号一般是2字节使用uint16_t&#xff0c;而IP地址用户习惯使用点分十进制格式所以传入的是string类型…

【常见面试题】JS 发布者、订阅者模式

面试中经常出现问到如何实现JS 发布者、订阅者模式。下面是ES5实现发布订阅模式。 1、直接上代码。 function EventEmitter() {this.events {}; }; // 订阅者 EventEmitter.prototype.on function(ename, callback) {if (!this.events[ename]) {// 初始化创建订阅&#xff…

C++ 控制语句(二)

一 break continue和goto语句 1 break语句 在switch语句中&#xff0c;分隔case子句&#xff0c;跳出switch语句。 在循环语句中可以立即终止循环语句的执行。 2 continue语句 功能:在一次循环过程中,跳过continue语句以下的语句,直 接进入下一次循环操作。 3 goto语句 …

软考98-上午题-【信息安全】-防火墙

一、考试概述 该内容与计算机网络关联。 分值&#xff1a;2分 二、防火墙 防火墙 (Firewall) 是建立在内外网络边界上的过滤封锁机制&#xff0c;它认为内部网络是安全和可信赖的&#xff0c;而外部网络是不安全和不可信赖的。 防火墙的作用是防止不希望的、未经授权地进出…

CCF-CSP认证考试 202303-5 施肥 35/60/75/100分题解

更多 CSP 认证考试题目题解可以前往&#xff1a;CSP-CCF 认证考试真题题解 原题链接&#xff1a; 202303-5 施肥 时间限制&#xff1a; 2.0s 内存限制&#xff1a; 1.0GB 问题描述 春天到了&#xff0c;西西艾弗岛上的 n n n 块田地需要施肥了。 n n n 块田地编号为 1 , 2…

Qt消息机制和事件

Qt消息机制和事件 Qt消息机制和事件--2 事件 事件&#xff08;event&#xff09;是由系统或者 Qt 本身在不同的时刻发出的。当用户按下鼠标、敲下键盘&#xff0c;或者是窗口需要重新绘制的时候&#xff0c;都会发出一个相应的事件。一些事件在对用户操作做出响应时发出&…

【数据结构】顺序表的实现——静态分配

&#x1f388;个人主页&#xff1a;豌豆射手^ &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;数据结构 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进…