93 lines
1.6 KiB
C++
93 lines
1.6 KiB
C++
|
/*****************************************************************************\
|
||
|
* Class CriticalSection - Implementation
|
||
|
*
|
||
|
* Copyright (C) 1998 Microsoft Corporation
|
||
|
*
|
||
|
* History:
|
||
|
* Jun 10, 1998, Weihai Chen (weihaic)
|
||
|
*
|
||
|
\*****************************************************************************/
|
||
|
|
||
|
#include "spllibp.hxx"
|
||
|
|
||
|
CCriticalSection::CCriticalSection (void):
|
||
|
m_bValid (TRUE)
|
||
|
{
|
||
|
__try {
|
||
|
InitializeCriticalSection (&m_csec);
|
||
|
}
|
||
|
__except (1) {
|
||
|
m_bValid = FALSE;
|
||
|
SetLastError (ERROR_INVALID_HANDLE);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
CCriticalSection::~CCriticalSection (void)
|
||
|
{
|
||
|
|
||
|
if (m_bValid) {
|
||
|
DeleteCriticalSection (&m_csec);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
BOOL
|
||
|
CCriticalSection::Lock (void)
|
||
|
const
|
||
|
{
|
||
|
BOOL bRet;
|
||
|
|
||
|
if (m_bValid) {
|
||
|
|
||
|
__try {
|
||
|
EnterCriticalSection ((PCRITICAL_SECTION) &m_csec);
|
||
|
bRet = TRUE;
|
||
|
}
|
||
|
__except (1) {
|
||
|
SetLastError (ERROR_INVALID_HANDLE);
|
||
|
bRet = FALSE;
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
bRet = FALSE;
|
||
|
|
||
|
return bRet;
|
||
|
}
|
||
|
|
||
|
BOOL
|
||
|
CCriticalSection::Unlock (void)
|
||
|
const
|
||
|
{
|
||
|
BOOL bRet;
|
||
|
|
||
|
if (m_bValid) {
|
||
|
LeaveCriticalSection ((PCRITICAL_SECTION) &m_csec);
|
||
|
bRet = TRUE;
|
||
|
}
|
||
|
else
|
||
|
bRet = FALSE;
|
||
|
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
|
||
|
TAutoCriticalSection::TAutoCriticalSection (
|
||
|
CONST TCriticalSection & refCrit):
|
||
|
m_pCritSec (refCrit)
|
||
|
|
||
|
{
|
||
|
m_bValid = m_pCritSec.Lock ();
|
||
|
}
|
||
|
|
||
|
TAutoCriticalSection::~TAutoCriticalSection ()
|
||
|
{
|
||
|
if (m_bValid)
|
||
|
m_pCritSec.Unlock ();
|
||
|
}
|
||
|
|
||
|
BOOL
|
||
|
TAutoCriticalSection::bValid (VOID)
|
||
|
{
|
||
|
return m_bValid;
|
||
|
};
|