1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
| #pragma once class CCriticalSection /* 临界区封装类 */ { public: CCriticalSection( DWORD dwSpinCount = 0 ) { m_bInit = FALSE; if ( dwSpinCount == 0 ) { InitializeCriticalSection(); } else InitializeCriticalSectionAndSpinCount( dwSpinCount ); }
~CCriticalSection() { DeleteCriticalSection(); }
void InitializeCriticalSection() { if ( m_bInit ) { PRINTFUNDEBUGINFO( "已初始化" ); return; } ::InitializeCriticalSection( &m_cs ); m_bInit = TRUE; }
BOOL InitializeCriticalSectionAndSpinCount( DWORD dwSpinCount ) { if ( m_bInit ) { PRINTFUNDEBUGINFO( "已初始化" ); return(FALSE); } return(m_bInit = ::InitializeCriticalSectionAndSpinCount( &m_cs, dwSpinCount ) ); }
DWORD SetCriticalSectionSpinCount( DWORD dwSpinCount ) { return(::SetCriticalSectionSpinCount( &m_cs, dwSpinCount ) ); }
void EnterCriticalSection() { ::EnterCriticalSection( &m_cs ); }
void LeaveCriticalSection() { ::LeaveCriticalSection( &m_cs ); }
BOOL TryEnterCriticalSection() { return(::TryEnterCriticalSection( &m_cs ) ); }
void DeleteCriticalSection() { if ( !m_bInit ) { PRINTFUNDEBUGINFO( "无对象" ); return; } m_bInit = FALSE; ::DeleteCriticalSection( &m_cs ); }
protected: private: BOOL m_bInit; CRITICAL_SECTION m_cs; };
|
核心编程看到第八章 “关键段和旋转锁” 趁热打铁 整一下