#pragma once #include //对临界区同样进行封装 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; };