Qt QMutexLock 自动解锁机制

阅读: 评论:0

Qt QMutexLock 自动解锁机制

Qt QMutexLock 自动解锁机制

QMutexLocker 自动解锁机制

QMutexLocker 是一个便利类,它可以自动对QMutex加锁与解锁。因为QMutexLocker 申请的这个lock变量在这个函数退出时,自动的调用析构函数来解锁。这样可以防止在程序编写的过程中,不同的地方有多个return的情况,在发生return的时候,没有解锁,导致程序死锁。
下面是一个例子,分别使用了以上两个类。
一、使用QMutex
int complexFunction(int flag)
{
mutex.lock();

 int retVal = 0;switch (flag) {case 0:case 1:mutex.unlock();return moreComplexFunction(flag);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;

}

二、使用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;}

三、Qmutex互斥量 被多次使用时, QMutexLocker 需要重新加锁及解锁

def _get_data_in(self):while True:if not self._pause:QMutexLocker(self._mutex).relock()package = Nonetry:package = self.__last_data()self._extract_and_distribute_data(package)except AttributeError:passfinally:self._last_packet = package[0] if package is not None else NoneQMutexLocker(self._mutex).unlock()sleep(0.01)
def _get_data(self, type=0):
QMutexLocker(self._mutex).relock()try:if type == 1:if len(self._data_logging):return self._data_loggingelse:return Noneelif type == 2:if isinstance(self._data_STA, StratGeneralAcc):return self._data_STA.datareturn Noneelif type == 3:return self._data_drawelse:raise NotImplementedfinally:QMutexLocker(self._mutex).unlock()

本文发布于:2024-02-04 23:36:32,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170718957060786.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:解锁   机制   Qt   QMutexLock
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23