You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
102 lines
1.9 KiB
102 lines
1.9 KiB
//============================================================================
|
|
//
|
|
// CAutoLock.cpp -- Automatic locking class for mutexes and critical sections.
|
|
//
|
|
// Copyright (c) 1998-2002 Microsoft Corporation, All Rights Reserved
|
|
//
|
|
// Revisions: 6/26/98 a-kevhu Created
|
|
//
|
|
//============================================================================
|
|
#include "precomp.h"
|
|
#include "CAutoLock.h"
|
|
|
|
/*
|
|
CAutoLock::CAutoLock(HANDLE hMutexHandle)
|
|
:
|
|
m_pcCritSec(NULL),
|
|
m_pcMutex(NULL),
|
|
m_psCritSec(NULL),
|
|
m_hMutexHandle(hMutexHandle),
|
|
bExec ( FALSE )
|
|
{
|
|
::WaitForSingleObject(m_hMutexHandle, INFINITE);
|
|
}
|
|
|
|
CAutoLock::CAutoLock(CMutex& rCMutex):
|
|
m_pcCritSec(NULL),
|
|
m_psCritSec(NULL),
|
|
m_hMutexHandle(NULL),
|
|
m_pcMutex(&rCMutex),
|
|
bExec ( FALSE )
|
|
|
|
{
|
|
|
|
m_pcMutex->Wait(INFINITE);
|
|
}
|
|
*/
|
|
|
|
CAutoLock::CAutoLock(CCriticalSec& rCCritSec):
|
|
// m_hMutexHandle(NULL),
|
|
// m_pcMutex(NULL),
|
|
m_pcCritSec(&rCCritSec),
|
|
m_psCritSec(NULL),
|
|
bExec ( FALSE )
|
|
|
|
{
|
|
m_pcCritSec->Enter();
|
|
}
|
|
|
|
CAutoLock::CAutoLock( CStaticCritSec & rCCriticalSec):
|
|
// m_hMutexHandle(NULL),
|
|
// m_pcMutex(NULL),
|
|
m_pcCritSec(NULL),
|
|
m_psCritSec(&rCCriticalSec),
|
|
bExec ( FALSE )
|
|
|
|
{
|
|
m_psCritSec->Enter();
|
|
};
|
|
|
|
// destructor...
|
|
CAutoLock::~CAutoLock()
|
|
{
|
|
if ( FALSE == bExec )
|
|
{
|
|
Exec () ;
|
|
}
|
|
}
|
|
|
|
BOOL CAutoLock::Exec ()
|
|
{
|
|
BOOL bStatus = TRUE;
|
|
/*
|
|
if (m_hMutexHandle)
|
|
{
|
|
bStatus = ::ReleaseMutex(m_hMutexHandle);
|
|
}
|
|
else if (m_pcMutex)
|
|
{
|
|
bStatus = m_pcMutex->Release();
|
|
}
|
|
else */
|
|
if (m_pcCritSec)
|
|
{
|
|
m_pcCritSec->Leave();
|
|
}
|
|
else
|
|
{
|
|
m_psCritSec->Leave();
|
|
}
|
|
|
|
if (!bStatus)
|
|
{
|
|
LogMessage2(L"CAutoLock Error: %d", ::GetLastError());
|
|
}
|
|
else
|
|
{
|
|
bExec = TRUE ;
|
|
}
|
|
|
|
return bStatus ;
|
|
}
|
|
|