#include <winbase.h>
// MT-exclusive lock
class CLock {
public:
CLock() { InitializeCriticalSection (&m_criticalSection); }
void Lock () { EnterCriticalSection (&m_criticalSection); }
void Unlock () { LeaveCriticalSection (&m_criticalSection); }
virtual ~CLock() { DeleteCriticalSection (&m_criticalSection); }
private:
CRITICAL_SECTION m_criticalSection;
};
class CAutoLock
{
public:
CAutoLock(CLock* pLock)
{
m_pLock = pLock;
m_pLock->Lock();
}
~CAutoLock()
{
m_pLock->UnLock();
delete m_pLock;
m_pLock = NULL;
}
private:
CLock* m_pLock;
}