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