windows-nt/Source/XPSP1/NT/printscan/print/spooler/dbglib/dbgcs.cxx
2020-09-26 16:20:57 +08:00

127 lines
1.6 KiB
C++

/*++
Copyright (c) 1998-1999 Microsoft Corporation
All rights reserved.
Module Name:
dbgcs.cxx
Abstract:
Critical Section class
Author:
Steve Kiraly (SteveKi) 30-Mar-1997
Revision History:
--*/
#include "precomp.hxx"
#pragma hdrstop
#include "dbgcs.hxx"
TDebugCriticalSection::
TDebugCriticalSection(
VOID
) : m_bValid( FALSE )
{
Initialize();
}
TDebugCriticalSection::
~TDebugCriticalSection(
VOID
)
{
Release();
}
BOOL
TDebugCriticalSection::
bValid(
VOID
) const
{
return m_bValid;
}
VOID
TDebugCriticalSection::
Enter(
VOID
)
{
EnterCriticalSection( &m_CriticalSection );
}
VOID
TDebugCriticalSection::
Leave(
VOID
)
{
LeaveCriticalSection( &m_CriticalSection );
}
VOID
TDebugCriticalSection::
Initialize(
VOID
)
{
if (!m_bValid)
{
InitializeCriticalSection( &m_CriticalSection );
m_bValid = TRUE;
}
}
VOID
TDebugCriticalSection::
Release(
VOID
)
{
if (m_bValid)
{
DeleteCriticalSection( &m_CriticalSection );
m_bValid = FALSE;
}
}
TDebugCriticalSection::TLock::
TLock(
TDebugCriticalSection &CriticalSection
) : m_CriticalSection( CriticalSection )
{
m_CriticalSection.Enter();
}
TDebugCriticalSection::TLock::
~TLock(
VOID
)
{
m_CriticalSection.Leave();
}
TDebugCriticalSection::TUnLock::
TUnLock(
TDebugCriticalSection &CriticalSection
) : m_CriticalSection( CriticalSection )
{
m_CriticalSection.Leave();
}
TDebugCriticalSection::TUnLock::
~TUnLock(
VOID
)
{
m_CriticalSection.Enter();
}