天津定制开发网站,什么叫网络服务商,wordpress 关键字,外文网站建设QMutexLocker
详细描述:QMutexLocker类是一个方便的类#xff0c;它简化了锁定和解锁互斥锁。在复杂函数和语句或异常处理代码中对QMutex进行锁定和解锁是容易出错的#xff0c;很难调试。在这种情况下可以使用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被销毁时他自动解锁简化了代码。栈中对象在代码块结束时自动释放内存。