QMutexLocker用法

QMutexLocker

详细描述:QMutexLocker类是一个方便的类,它简化了锁定和解锁互斥锁。在复杂函数和语句或异常处理代码中对QMutex进行锁定和解锁是容易出错的,很难调试。在这种情况下可以使用QMutexLocker来确保互斥锁的状态总是定义良好的。应该在需要锁定QMutex的fuconcept中创建QMutexLocker。您可以使用unlock()和relock()对互斥对象进行解锁和重新锁定。如果锁住了,那么当QMutexLocker被销毁时,互斥锁将被解锁。

意思就是用QMutexLocker创建的时候进行上锁,然后等他的对象被销毁时自动就解锁了,简化了互斥锁的操作流程。QMutexLocker创建时传入一个并未锁定(若是锁定可用relock重新锁定或unlock解锁)的QMutex指针变量

如果不用QMutexLocker进行操作时

 int complexFunction(int flag){mutex.lock();//上锁int retVal = 0;switch (flag) {case 0:case 1:retVal = moreComplexFunction(flag);break;case 2:{int status = anotherFunction();if (status < 0) {mutex.unlock();//解锁return -2;}retVal = status + flag;}break;default:if (flag > 10) {mutex.unlock();//解锁return -1;}break;}mutex.unlock();//解锁return retVal;}

如果进行多个解锁操作的话那么势必会复杂化了代码,逻辑不到位的话还会出现你意想不到的bug。所以QT中可以用QMutexLocker进行互斥锁的操作

 int complexFunction(int flag){QMutexLocker locker(&mutex);//函数调用结束,局部变量销毁int retVal = 0;switch (flag) {case 0:case 1:return moreComplexFunction(flag);case 2:{int status = anotherFunction();if (status < 0)return -2;retVal = status + flag;}break;default:if (flag > 10)return -1;break;}return retVal;}

当对象locker被销毁时,他自动解锁,简化了代码。栈中对象在代码块结束时自动释放内存。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软件工程生命周期模型_软件生命周期模型比较| 软件工程

软件工程生命周期模型软件生命周期模型 (Software Lifecycle Models) There are five software lifecycle models that are commonly used while developing any software. These are as follows: 开发任何软件时&#xff0c;通常使用五个软件生命周期模型。 这些如下&#xff…

VB 日期时间函数

1.date(日期表达式)将日期表达式转换成日期类型的数据。日期表达式是任何可以解释成日期的表达式&#xff0c;包含日期文字&#xff0c;可以看作日期的字符串以及从函数返回的日期。比如&#xff1a;myDate CDate("99-5-20") &#xff0c;这样的日期表达式必须加双引…

高并发系统 3 大利器之缓存

引言随着互联网的高速发展&#xff0c;市面上也出现了越来越多的网站和app。我们判断一个软件是否好用&#xff0c;用户体验就是一个重要的衡量标准。比如说我们经常用的微信&#xff0c;打开一个页面要十几秒&#xff0c;发个语音要几分钟对方才能收到。相信这样的软件大家肯定…

QTimer与事件循环理解

问题分析 最近在使用QT的时候发现了某些问题&#xff0c;查阅资料最后总结一下。我起初是想用QT在界面还在加载时加载一副动画&#xff0c;然后动画下面有加载的滚动条代表时间&#xff0c;由于测试所以界面加载没写很多东西很快就加载完成了。我就想让他加载慢点我看看效果。…

MYSQL 数学运算符问题

背景&#xff1a; 在mysql中 ’stringA stringB 这种类型的操作&#xff0c;在mysql内部会自动转化为两个double 数进行运算。 -------------------------------------------------------------------------------------------------------------------------------- 例子&a…

C语言 链表

// LinkTable.cpp : Defines the entry point for the console application. // 程序运行&#xff0c;用户输入学生数&#xff0c;根据用户输入学生数&#xff0c;动态创建链表&#xff0c;提示输入学生 // 姓名、成绩&#xff0c;最后输出所有学生数据以及平均成绩 #include &…

Python | 重命名现有文件(os.rename()方法的示例)

重命名现有文件 (Renaming an existing file) To change the name of an existing file – we use "rename()" method of "os" module – so to access the "rename()" method, we must have to import the module "os". 要更改现有文…

面试系列第1篇:常见面试题和面试套路有哪些?

作者 | 面哥来源 | Java面试真题解析&#xff08;ID&#xff1a;aimianshi666&#xff09;转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone&#xff09;面试是人生中为数不多的改变自身命运的途径之一&#xff0c;当然有效的准备面试也是人生中为数不多的低投入高回报的…

c语言limits.h_ (limits.h)C ++中(整数类型的大小)的宏常量

c语言limits.hC 宏常量(整数类型的大小) (C Macro constants of (sizes of integral types)) In this tutorial, we are learning about some of the defined macro constants which are used to find the sizes of the integral types like a character, short, integer, long…

怎样让VB6程序只能运行一次

方法一&#xff1a;利用PrevInstance属性If App.PrevInstance ThenCall MsgBox("对不起本程序已在运行中, 不得重复加载!!", vbCritical)EndEnd If优点&#xff1a;简单方便、缺点&#xff1a;针对性不强、随意复制一份即可再次运行、方法二&#xff1a;创建互斥体&a…

PLSQL_性能优化系列15_Oracle Explain Plan解析计划解读

2014-12-19 Created By BaoXinjian 一、摘要 在SQL语句的执行计划中&#xff0c;包含很多字段项和很多模块&#xff0c;其不同字段代表了不同的含义且在不同的情形下某些字段、模块显示或不显示&#xff0c;下 面的描述给出了执行计划中各字段的含义以及各模块的描述。 二、执行…

漫话:应用程序被拖慢?罪魁祸首竟然是Log4j!

之前一段时间&#xff0c;为我们发现的一个SaaS应用程序会间歇性地卡顿、变慢&#xff0c;因为很长时间都没有定位到原因&#xff0c;所以解决的办法就只能是重启。这个现象和之前我们遇到的程序变得卡顿不太一样&#xff0c;因为我们发现这个应用程序不仅在高流量期间时会变慢…

面试系列第2篇:回文字符串判断的3种方法!

作者 | 磊哥来源 | Java面试真题解析&#xff08;ID&#xff1a;aimianshi666&#xff09;转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone&#xff09;回文字符串判断是面试和笔试中常见的面试题之一&#xff0c;同时也是 LeetCode 中一道经典的面试题&#xff0c;那么…

工程中多个不同类型线程池_软件工程中不同类型的设计策略

工程中多个不同类型线程池As we know that the designing phase is probably the second phase in the software development lifecycle, which comes after the feasibility testing and requirement analysis phase. As the name itself defines that in this phase, the sof…

vb检查磁盘类型

Option ExplicitPrivate Declare Function GetDriveType Lib "kernel32.dll" Alias "GetDriveTypeA" (ByVal nDrive As String) As LongPrivate Sub Command1_Click()Select Case GetDriveType("C:\")Case 0MsgBox "未知类型", vbExcl…

Activity具体解释(生命周期、以各种方式启动Activity、状态保存,全然退出等)...

一、什么是Activity&#xff1f; 简单的说&#xff1a;Activity就是布满整个窗体或者悬浮于其它窗体上的交互界面。在一个应用程序中通常由多个Activity构成&#xff0c;都会在Manifest.xml中指定一个主的Activity&#xff0c;例如以下设置 <actionandroid:name"androi…

将十进制转化为八进制的算法_十进制系统转换为八进制系统

将十进制转化为八进制的算法Converting a number from Decimal to Octal is almost similar to converting Decimal into Binary, although just one difference is that unlike Binary conversion, here in an integral part, we successively divide the number by 8 until t…

阿里为什么推荐使用LongAdder,而不是volatile?

这是我的第 87 篇原创文章作者 | 王磊来源 | Java中文社群&#xff08;ID&#xff1a;javacn666&#xff09;转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone&#xff09;阿里《Java开发手册》最新嵩山版在 8.3 日发布&#xff0c;其中有一段内容引起了老王的注意&#…

VC函数中的延时操作

说到程序中的延时&#xff0c;你会想到怎么做&#xff0c;新开一个线程&#xff1f;如果我的程序只用单线程&#xff0c;却又想让函数等上10秒才返回值&#xff0c;而且还不能像使用Sleep函数那样不能处理其它消息呢&#xff1f;我在这里把论坛里能见到的几种延时方式总结一下。…

Eclipse中SVN的安装步骤(两种)和用法

一、给安装EclipseSVN&#xff0c;最常见的有两种方式&#xff1a;手动方式和使用安装向导方式。详细过程例如以下&#xff1a; 方式一&#xff1a;手动安装 1、从官网下载site-1.6.9.zip文件,网址是:subclipse.tigris.org2、从中解压出features与plugins目录&#xff0c;拷贝到…