zoukankan      html  css  js  c++  java
  • Qt 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;
      }
     
  • 相关阅读:
    各大搜索引擎的User-Agent
    xxx couldn't be loaded because it has not been added to the build settings.
    C#解压、压缩RAR文件
    [转载]C# Random 生成不重复随机数
    [转载]如何打一手好Log
    MongoDB服务器启动异常 1067
    [转载]Asp.net MVC2 与 MVC3 路由调试好帮手RouteDebug 与 RouteDebugger
    [转载]C#中获取时间戳(UnixTime)的方法
    C# winform 弹出输入框
    设计与框架
  • 原文地址:https://www.cnblogs.com/nanqiang/p/11011375.html
Copyright © 2011-2022 走看看