63 lines
872 B
C++
63 lines
872 B
C++
#include "StdAfx.h"
|
|
#include "WHDataLocker.h"
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////
|
|
|
|
//构造函数
|
|
CWHDataLocker::CWHDataLocker(CCriticalSection & CriticalSection, bool bLockAtOnce)
|
|
: m_CriticalSection(CriticalSection)
|
|
{
|
|
//设置变量
|
|
m_nLockCount=0;
|
|
|
|
//锁定对象
|
|
if (bLockAtOnce==true)
|
|
{
|
|
Lock();
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
//析构函数
|
|
CWHDataLocker::~CWHDataLocker()
|
|
{
|
|
//解除锁定
|
|
while (m_nLockCount>0)
|
|
{
|
|
UnLock();
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
//锁定函数
|
|
VOID CWHDataLocker::Lock()
|
|
{
|
|
//锁定对象
|
|
m_CriticalSection.Lock();
|
|
|
|
//设置变量
|
|
m_nLockCount++;
|
|
|
|
return;
|
|
}
|
|
|
|
//解锁函数
|
|
VOID CWHDataLocker::UnLock()
|
|
{
|
|
//效验状态
|
|
ASSERT(m_nLockCount>0);
|
|
if (m_nLockCount==0) return;
|
|
|
|
//设置变量
|
|
m_nLockCount--;
|
|
|
|
//解除锁定
|
|
m_CriticalSection.Unlock();
|
|
|
|
return;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////
|