53 lines
811 B
C++
53 lines
811 B
C++
#pragma once
|
|
|
|
#include <windows.h>
|
|
//对临界区同样进行封装
|
|
class CMyCriticalSection
|
|
{
|
|
public:
|
|
CMyCriticalSection()
|
|
{
|
|
InitializeCriticalSection(&m_cSection);
|
|
}
|
|
|
|
void Lock()
|
|
{
|
|
EnterCriticalSection(&m_cSection);
|
|
}
|
|
|
|
void UnLock()
|
|
{
|
|
LeaveCriticalSection(&m_cSection);
|
|
}
|
|
|
|
|
|
//利用析构函数删除临界区对象
|
|
virtual ~CMyCriticalSection()
|
|
{
|
|
DeleteCriticalSection(&m_cSection);
|
|
}
|
|
private:
|
|
CRITICAL_SECTION m_cSection;
|
|
};
|
|
|
|
class CCriticalSectionAutoLock
|
|
{
|
|
public:
|
|
//利用构造函数上锁,即进去临界区
|
|
CCriticalSectionAutoLock(CMyCriticalSection *mySection)
|
|
:pCMySection(mySection)
|
|
{
|
|
pCMySection->Lock();
|
|
}
|
|
|
|
//利用析构函数解锁,即离开临界区
|
|
virtual ~CCriticalSectionAutoLock()
|
|
{
|
|
pCMySection->UnLock();
|
|
}
|
|
private:
|
|
CMyCriticalSection *pCMySection;
|
|
};
|
|
|
|
|