2010年1月11日 星期一

CCriticalSection - a critical section object.

// a critical section object.

CCriticalSection m_cs;
...


m_cs.Enter();
...
m_cs.Leave();

// CCriticalSection.h


class CCriticalSection  
{
    CRITICAL_SECTION m_CriticalSection;
public:
    void Leave();
    void Enter();

    CCriticalSection();
    virtual ~CCriticalSection();

};




// CCriticalSection.cpp

CCriticalSection::CCriticalSection()
{
    ::InitializeCriticalSection(&m_CriticalSection);
}

CCriticalSection::~CCriticalSection()
{
    ::DeleteCriticalSection(&m_CriticalSection);
}

void CCriticalSection::Enter()
{
    ::EnterCriticalSection(&m_CriticalSection);
}

void CCriticalSection::Leave()
{
    ::LeaveCriticalSection(&m_CriticalSection);
}


2 則留言:

  1. 這大概是我最小的一個類別了!

    回覆刪除
  2. 在解構的時候,如果還沒 Leave,就先 Leave 再 Delete,會不會更好呢?
    通常那個時後 就當掉了, 在做競爭時, 如果只解了一個 另一個沒 leave 到, 這時, 無條件死機! 因此在這裡不預設自動leave!

    回覆刪除