Compartilhar via


mutex.cpp

#include "headers.h"

Mutex::Mutex()
{
m_fInitialized = FALSE;
}

HRESULT Mutex::Create(Mutex * * ppMutex)
{
AssertOutPtr(ppMutex);

    HRESULT hr;
BOOL fSuccess;
DWORD error;
Mutex * pMutex = NULL;

    pMutex = new Mutex();
if (NULL == pMutex)
{
hr = E_OUTOFMEMORY;
goto LError;
}

    fSuccess = InitializeCriticalSectionAndSpinCount(&pMutex->m_criticalsection, 0);
if (!fSuccess)
{
error = GetLastError();
hr = HRESULT_FROM_WIN32(error);
goto LError;
}

    pMutex->m_fInitialized = true;
*ppMutex = pMutex;
pMutex = NULL;
hr = S_OK;

LError:

    if (NULL != pMutex)
delete pMutex;

    return hr;
}

Mutex::~Mutex()
{
if (this->m_fInitialized)
DeleteCriticalSection(&this->m_criticalsection);
}

void Mutex::Enter(void)
{
EnterCriticalSection(&this->m_criticalsection);
}

void Mutex::Leave(void)
{
LeaveCriticalSection(&this->m_criticalsection);
}