某个类有一个静态的CRITICAL_SECTION成员如何初始化?

解决方案 »

  1.   

    InitializeCriticalSection(CRITICAL_SECTION);
      

  2.   

    1.类自己管理对象的使用计数.
    .H:
    class CTestClass
    {
    static CRITICAL_SECTION m_cs ;
    static int m_nInitCs ;
    public:
    CTestClass() { if( !m_bInitCs ){  ::InitializeCriticalSection( &CTestClass::m_cs ) ; ++m_nInitCs ;}
    virtual ~CTestClass() { if( m_bInitCs ) { ::DeleteCritcalSection( &CTestClass::m_cs ) ;
    --m_nInitCs ; }
    } ;
    .CPP:
    CRITICAL_SECTION CTestClass::m_cs ;
    int CTest::m_bInitCs = 0 ;2.在使用该类的对象之前进行初使化,如
    BOOL CYourApp::InitInstance() {
    ::InitializeCriticalSection( &CTestClass::m_cs ) ;
    //..omitted
    } ;
    BOOL CYourApp::ExitInstance() {
    ::DeleteCriticalSection( &CTestClass::m_cs ) ;
    //..omitted
    }.H
    class CTestClass
    {
    static CRITICAL_SECTION m_cs ;
    //..omitted
    };
    .CPP
    CRITICAL_SECTION CTestClass::m_cs ;
      

  3.   

    更正:
    virtual ~CTestClass() 

    if( !--m_bInitCs ) { ::DeleteCritcalSection( &CTestClass::m_cs ) ;   }
    } ;
    CTestClass() {
    if( !m_bInitCs++ ) {  ::InitializeCriticalSection( CTestClass::m_cs ) ; }
    }
    多线程情况下可用InerlockedIncrement,InterlockedDecrement进行递增/递减操作.
      

  4.   

    在类声明中加入:
    CRITICAL_SECTION m_ce;
    在构造函数里加入:
    InitializeCriticalSection( &m_ce );
    在析构函数里加入:
    DeleteCriticalSection( &m_ce );
    在调用的时候:
    EnterCriticalSection( &m_ce );
    ……
    ……
    ……
    ……
    ……
    ……
    LeaveCriticalSection( &m_ce );就可以了