CSingleLock的使用注意(转)
来源:互联网 发布:登录淘宝网账号 编辑:程序博客网 时间:2024/06/04 23:40
先看看其代码:
声明:
/////////////////////////////////////////////////////////////////////////////
// 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::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之使用:
1、
CSingleLock在函数内使用,当函数返回时将释放CSingleLock对象,同时进行解锁
------------------------------------
2、
CSingleLock对象在栈上定义,构造时,Lock;CSingleLock的析构函数会自动调用同步对象的Unlock。
---------------------------------------
3、
CSingleLock就是为了使用方便才定义的,你作为成员变量失去他本来的意义了
-------------------------------------------
来源 : http://hi.baidu.com/2008rightman/blog/item/24fb8559e7181091810a1856.html
- CSingleLock的使用注意(转)
- CSingleLock的使用注意(转)
- CSingleLock的使用方法(多线程)
- CSingleLock
- CSingleLock
- CSingleLock
- CSingleLock
- 线程同步时,使用CSingleLock和CMutex配合不工作的问题
- memset()的使用注意
- CSingleLock CMultiLock
- CMutex CSingleLock
- CMutex CSingleLock
- CSingleLock CMultiLockquiet
- CSingleLock使用方法
- (转)stlport使用注意
- [转]HttpWebRequest使用注意(发生阻塞的解决办法)
- javaScript 的 this指针使用要注意(转)
- expect安装和使用需要注意的几个问题(转)
- Apache与Tomcat整合
- (unsigned char *)
- GDB调试器手册[转]
- DirectX3D画线接口ID3DXLine
- ORACLE11g IMP-00058
- CSingleLock的使用注意(转)
- Linux 中断学习之前言篇 中断之原理篇 一.中断的基本知识
- 将支持更多智能设备 MeeGo1.3最快年底发
- 在Tomcat上使用日志分析工具Awstats
- 移动开发参考书之Android篇
- 解析文件,要验证文件完整性
- C# Dictionary Examples, Keys and Values
- AQtime代码覆盖率深度分析之一
- Linux 中断学习之小试牛刀篇