转载文章:CSingleLock的使用

// 先看看其代码:
// 声明
class CSingleLock
{
  // Constructors
  public:
  CSingleLock(CSyncObject* pObject, BOOL bInitialLock = FALSE);   // Operations
  public:
  BOOL Lock(DWORD dwTimeOut = INFINITE);
  BOOL Unlock();
  BOOL Unlock(LONG lCount, LPLONG lPrevCount = NULL);
  BOOL IsLocked();   // Implementation
  public:
  ~CSingleLock();   protected:
  CSyncObject* m_pObject;
  HANDLE m_hObject;
  BOOL m_bAcquired;
}; // 实现
CSingleLock::CSingleLock(CSyncObject* pObject, BOOL bInitialLock)
{
  ASSERT(pObject != NULL);
  ASSERT(pObject->IsKindOf(RUNTIME_CLASS(CSyncObject)));   m_pObject = pObject;
  m_hObject = pObject->m_hObject;
  m_bAcquired = FALSE;   if (bInitialLock)
   Lock();
} BOOL CSingleLock::Lock(DWORD dwTimeOut /* = INFINITE */)
{
  ASSERT(m_pObject != NULL || m_hObject != NULL);
  ASSERT(!m_bAcquired);   m_bAcquired = m_pObject->Lock(dwTimeOut);
  return m_bAcquired;
} BOOL CSingleLock::Unlock()
{
  ASSERT(m_pObject != NULL);
  if (m_bAcquired)
   m_bAcquired = !m_pObject->Unlock();   // successfully unlocking means it isn't acquired
  return !m_bAcquired;
} BOOL CSingleLock::Unlock(LONG lCount, LPLONG lpPrevCount /* = NULL */)
{
  ASSERT(m_pObject != NULL);
  if (m_bAcquired)
   m_bAcquired = !m_pObject->Unlock(lCount, lpPrevCount);   // successfully unlocking means it isn't acquired
  return !m_bAcquired;
} BOOL CSingleLock::IsLocked()
{
  return m_bAcquired;
} CSingleLock::~CSingleLock()
{
  Unlock();
}

综上得CSingleLock之使用:

  • CSingleLock在函数内使用,当函数返回时将释放CSingleLock对象,同时进行解锁
  • CSingleLock对象在栈上定义,构造时,Lock;CSingleLock的析构函数会自动调用同步对象的Unlock。
  • CSingleLock就是为了使用方便才定义的,你作为成员变量失去他本来的意义了

【MFC】CSingleLock的使用的更多相关文章

  1. MFC多线程

    当前流行的Windows操作系统能同时运行几个程序(独立运行的程序又称之为进程),对于同一个程序,它又可以分成若干个独立的执行流,我们称之为线程,线程提供了多任务处理的能力.用进程和线程的观点来研究软 ...

  2. MFC中线程相关知识

    MFC中把线程分为两种类型,UI线程和工作者线程. MFC中启动一个线程的最好方法是调用AfxBeginThread,有两个版本,一个用于启动Ui线程,另外一个用于启动工作者线程.在MFC程序中,只有 ...

  3. 【转】MFC 之CEvent

    event是用来同步不同线程的.一旦一个线程结束了自己对全局资源的使用,他通过调用SetEvent通知别人可以使用了.如果这个被删了,其他线程将被阻塞 当一个线程里调用了::WaitForSingle ...

  4. MFC【17-2】线程和线程同步化

    17-2线程同步 Windows支持4中类型的同步对象,可以用过来同步由并发运行的线程执行的操作: 临界区 互斥量 事件 信号量 MFC在名为CCriticalSection\CMutex\CEven ...

  5. 我的MFC/C++学习笔记 http://blog.bccn.net/CrystalFan/6909

    2009.07.31 ------------------------------------------------------------------------------------ No.1 ...

  6. MFC 结束线程

    在wtl工程中定义一个现成,如下:DWORD WINAPI ThreadFunc( LPVOID pParam ){if( g_pMainlg )g_pMainlg->DoEnumNetwork ...

  7. MFC 简介

    参考:https://baike.baidu.com/item/MFC/2236974 MFC (微软基础类库) 编辑 锁定 讨论999   MFC(Microsoft Foundation Clas ...

  8. vs2010静态链接MFC库报链接错误

    由于需要将MFC程序在其它电脑上运行,所以需要将动态链接的MFC改成静态链接,本以为很简单,没想到链接的时候出现下面的链接错误: uafxcw.lib(afxmem.obj) : error LNK2 ...

  9. MFC中成员变量的声明顺序与析构顺序

    第一次用博客,第一篇随笔,就写今天遇到的一个问题吧. 在VS2008的MFC对话框程序,窗口成员变量的声明顺序与其析构顺序相反,即,先声明的变量后析构,后声明的变量先析构.未在其他模式下测试. cla ...

  10. VC中的MFC到底是什么?

    1. 微软基础类库(英语:Microsoft Foundation Classes,简称MFC)是一个微软公司提供的类库(class libraries),以C++类的形式封装了Windows API ...

随机推荐

  1. go基础-依赖管理

    有些不可思议,简洁.优雅的go语言依赖管理如此混乱,发布多年也没有可靠的依赖管理机制,官方先后推出了多种依赖管理机制gopath.vendor.dep等,没有一个顺手,直到在Go 1.11推出go m ...

  2. 时间复杂度为 O(nlogn) 的排序算法

    归并排序 归并排序遵循分治的思想:将原问题分解为几个规模较小但类似于原问题的子问题,递归地求解这些子问题,然后合并这些子问题的解来建立原问题的解,归并排序的步骤如下: 划分:分解待排序的 n 个元素的 ...

  3. 又有新框架上线了,测试、AI 通通有「GitHub 热点速览」

    本周热点之一可能就是 Apple 刚开源便获得 8k+ star 的机器学习框架 mlx,顺带官方开源的 mlx-example(示例仓)也在热门榜上有一席之位,据说它已经跑通了大模型 Llama 7 ...

  4. erp——绩效考核系统——数据需求说明书

    绩效考核--数据需求说明书 1.引言 1.1编写目的 数据要求说明书详细的提供了系统中各个数据的流向,是设计数据库的关键所在,为以后的编码以及测试提供一份可靠的依据. 1.2 对象 本<数据要求 ...

  5. K8S核心技术

    一.命令行工具Kubectl kubectl 是 Kubernetes 集群的命令行工具,通过 kubectl 能够对集群本身进行管理,并能 够在集群上进行容器化应用的安装部署 1.基本语法 kube ...

  6. 好家伙,这个开源项目硬生生复制了一个 ChatGPT Plus 出来

    最近有一款聊天机器人框架 Lobe Chat 火出了天际,它不仅支持多模态,支持语音会话,还有一个强大的 Function Calling 插件生态系统(可以作为 ChatGPT 插件的平替).最重要 ...

  7. bash shell笔记整理——cd命令、目录路径

    cd---change directory 改变目录的意思 语法: cd [选项] <目录> 选项: -L 会自动进入符号连接目录(默认) -P 进入符号连接目录的真实目录下. 常用: 命 ...

  8. 【UniApp】-uni-app-项目实战页面布局(苹果计算器)

    前言 经过前面的文章介绍,基本上 UniApp 的内容就介绍完毕了 那么从本文开始,我们就开始进行一个项目的实战 这次做的项目是苹果计算器,这个项目的难度不是很大,但是也不是很简单,适合练手 创建项目 ...

  9. python获取已安装程序列表

    python获取已安装程序列表 本文主要讲述通过python脚本获取android 设备已安装列表. 首先,Python本身无法直接获取Android设备上已安装的程序列表,所以这里主要借助adb命令 ...

  10. C#设计模式之享元模式(Flyweight)

    using System; using System.Collections; public class Client { public static void Main(string[] args) ...