#include "stdafx.h" #include "criticalsection.h" using namespace WZPUBLIC; CriticalSection::CriticalSection(void) { InitSpinCount(); } CriticalSection::~CriticalSection(void) { ::DeleteCriticalSection(&m_cs); } BOOL CriticalSection::InitSpinCount(DWORD dwSpinCount) { return ::InitializeCriticalSectionAndSpinCount(&m_cs, dwSpinCount); } void CriticalSection::Init(void) { return ::InitializeCriticalSection(&m_cs); } DWORD CriticalSection::SetSpinCount(DWORD dwSpinCount) { return ::SetCriticalSectionSpinCount(&m_cs, dwSpinCount); } bool CriticalSection::TryLock() { return (TRUE==(::TryEnterCriticalSection(&m_cs))); } void CriticalSection::Lock() { ::EnterCriticalSection(&m_cs); } void CriticalSection::UnLock() { ::LeaveCriticalSection(&m_cs); } CriticalSection::AutoLock::AutoLock(CriticalSection &cs) :m_cs(cs) { m_cs.Lock(); } CriticalSection::AutoLock::~AutoLock() { m_cs.UnLock(); }