目录
官方解析
重点如下:
1.QMutexLocker比QMutex的lock与unlock更加方便;
2.当函数生存周期结束后QMutexLocker会自动unlock;
3.如果加锁的部分抛出了异常,使用QMutex就无法unlock,而使用QMutexLocker可以到达解锁的效果;
4.QMutexLocker可以调用他传进来的QMutex对象,调用这个函数mutex();
栗子
使用原始的QMutex,抛出异常后不会进行解锁,如下代码:
#include <QString>
#include <QMutex>
#include <QDebug>
//一般互斥锁都定义到.cpp内外,或者为一个成员,不会在函数中定义
QMutex mutex;
void tryThrowFunction(){
mutex.lock();
int judgeValue = 0;
switch(judgeValue){
case 0:
throw "error ..........";
break;
default:
qDebug() << "switch finished!";
}
mutex.unlock();
}
int main(void)
{
try{
tryThrowFunction();
}
catch(const char *err){
qDebug() << err;
}
return 0;
}
运行截图如下(Qt还提示,锁没解除):
使用QMutexLocker后运行截图如下:
源码如下:
#include <QString>
#include <QMutex>
#include <QMutexLocker>
#include <QDebug>
//一般互斥锁都定义到.cpp内外,或者为一个成员,不会在函数中定义
QMutex mutex;
void tryThrowFunction(){
QMutexLocker locker(&mutex);
int judgeValue = 0;
switch(judgeValue){
case 0:
throw "error ..........";
break;
default:
qDebug() << "switch finished!";
}
}
int main(void)
{
try{
tryThrowFunction();
}
catch(const char *err){
qDebug() << err;
}
return 0;
}