先看看其代码:
声明:
/
// CSingleLockclass 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;
};
实现:
/
// CSingleLockCSingleLock::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就是为了使用方便才定义的,你作为成员变量失去他本来的意义了
-------------------------------------------