设为首页 加入收藏

TOP

CCriticalSection的使用(二)
2012-12-06 13:47:44 来源: 作者: 【 】 浏览:539
Tags:CCriticalSection 使用

 

    这个值以秒为单位,他的默认值为2592000秒,大约30天.

    8、同一个线程可以随便进入用一个关键段N次,也就是说同一个线程调用EnterCriticalSection无论几次都会返回.不同线程是否能够进入关键段,要看EnterCriticalSection的参数(CRITICAL_SECTION结构的地址)之前是否有线程进入过.要记住:飞机上的卫生间有多个,你可以随便进入无人的卫生间,不能进入有人的卫生间.

    弄明白了CRITICAL_SECTION之后,使用CCriticalSection非常方便,如虎添翼.看代码:

    //头文件

    [cpp]

    class CCriticalSection : public CSyncObjet

    {...

    public:

    CRITICAL_SECTION m_sect;

    public:

    BOOL Unlock();

    BOOL Lock();

    BOOL Lock(DWORD dwTimeout);

    ...

    }

    [cpp]

    <p>//构造函数</p><p></p>CCriticalSection::CCriticalSection() : CSyncObject(NULL)

    {

    HRESULT hr = S_OK;

    if (!InitializeCriticalSectionAndSpinCount(&m_sect, 0))//可以理解为InitializeCriticalSection,为了效率,加了一个旋转锁.

    {

    hr =  HRESULT_FROM_WIN32(GetLastError());

    }

    if (FAILED(hr))

    {

    AtlThrow(hr);

    }

    }

    //进入关键段

    [cpp]

    BOOL CCriticalSection::Lock()

    {

    ::EnterCriticalSection(&m_sect);

    return TRUE;

    }

    // 离开关键段

    [cpp]

    BOOL CCriticalSection::Unlock()

    {

    ::LeaveCriticalSection(&m_sect);

    return TRUE;

    }

    // 析构

    [cpp]

    CCriticalSection::~CCriticalSection()

    {

    ::DeleteCriticalSection(&m_sect);

    }

      

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇POJ线段树求矩形面积 下一篇zoj Split the Re..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: