转载文章: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. DevOps|研发提效-敏捷开发之每日站立会

    对于研发效能团队建设和组织,本文不再赘述,可以参考之前的文章,已经讲得很透彻了.本文重点讲我们日常是怎么开站立会,怎么让团队跑起来,高效能产出的.每日站立会,15分钟到30分钟,看似非常短的一个会,但 ...

  2. Kylin Linux Advanced Server V10 上安装 Nacos详细步骤

    要在 Kylin Linux Advanced Server V10 上安装 Nacos,可以按照以下进行操作:1.安装 Java JDK:首先确保已在 Kylin Linux Advanced Se ...

  3. springMvc报错

    这个报错困扰了我大概一天,主要是刚开始没抓到主要原因,是因为自己的项目结构出现了问题, 导致找不到应有的东西,另一方面就是maven的问题,将maven解决后这个就能用了. 具体解决在https:// ...

  4. CH395+EMQX实现MQTT应用(Windows系统)

    目录: 1.MQTT协议 1.1简介 1.2特性 1.3实现方式 1.4数据包结构 2.EMQX具体操作步骤 3.代码说明 4.工程链接 MQTT协议 1.MQTT简介 MQTT是一种基于 发布/订阅 ...

  5. MinIO客户端之rb

    MinIO提供了一个命令行程序mc用于协助用户完成日常的维护.管理类工作. 官方资料 mc rb 彻底删除指定的桶. 命令如下: ./mc rb local1/bkt1 控制台的输出,如下: mc: ...

  6. Jenkins 系列:Jenkins 安装(Windows、Mac、Centos)和简介

    目录 简介 发展历史 应用场景 Jenkins 安装部署 先决条件 硬件要求 软件包下载 war 包部署 linux 系统部署 mac 系统部署 windows 系统部署 安装后基本配置 解锁 自定义 ...

  7. 利用腾讯快捷登录协议截取 QQ ClientKey / QQKey 实战课程

    本文主要通过利用腾讯网页快捷登录协议来模拟访问并截取已登录 QQ 客户端的Token.Uin.ClientKey.Skey.P_skey等. Step 1. https://ssl.xui.ptlog ...

  8. H3C 存储换盘操作

    实际存储型号H3C CF8844 环境说明:H3C存储设备存在一个坏盘需要更换. 更换准备 1. 取出备件检查完毕后放置到安全场所(请严格按照<IT产品现场工程师通用服务规(维修篇)>操作 ...

  9. java生成企业公章图片源代码

    企业公章图片在电子签章业务中应用广泛,在电子签章应用过程中首先需要生成公章图片,然后再使用公章图片结合数字签名技术完成电子签,这样就实现了从可视化到不可篡改的数字化电子签章功能,以下是企业公章图片生成 ...

  10. Not on FX application thread(八)

    Not on FX application thread(八) JavaFX 从入门到入土系列 当你不在主线程中操作UI时会出现以下异常: Not on FX application thread 可 ...