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被销毁时,他自动解锁,简化了代码。栈中对象在代码块结束时自动释放内存。