文件 CWin32CriticalSection.h
#pragma once
class CWin32CriticalSection
{
public:
CWin32CriticalSection(CRITICAL_SECTION& csInUse):m_csInUse(csInUse)
{
}
~CWin32CriticalSection()
{
}
__forceinline void EnterInUse()
{
EnterCriticalSection(&m_csInUse);
}
__forceinline void LeaveInUse()
{
LeaveCriticalSection(&m_csInUse);
}
private:
CRITICAL_SECTION& m_csInUse;
};
class CSingleWaitWin32CS
{
public:
CSingleWaitWin32CS(CRITICAL_SECTION& csInUse):cs(csInUse)
{
cs.EnterInUse();
}
~CSingleWaitWin32CS()
{
cs.LeaveInUse();
}
CWin32CriticalSection cs;
};
class CWin32CS
{
public:
CWin32CS(CRITICAL_SECTION& csInUse):cs(csInUse)
{
}
~CWin32CS()
{
}
void Lock()
{
cs.EnterInUse();
}
void UnLock()
{
cs.LeaveInUse();
}
CWin32CriticalSection cs;
};
用法:
class CTest
{
public:
void Init();
void UnInit();
void Do1();
void Do2();
CRITICAL_SECTION m_cs;
};
void CTest::Init()
{
InitializeCriticalSection(&m_cs);
}
void CTest::UnInit()
{
DeleteCriticalSection(&m_cs);
}
void CTest::Do1()
{
CSingleWaitWin32CS cs1(m_cs);
//do some thing
....
....
....
....
}
void CTest::Do2()
{
CWin32CS cs2(m_cs);
cs2.Lock();
//do some thing
....
....
....
....
cs2.UnLock();
}