CComCriticalSection 类
此类提供用于获取和释放临界区对象所有权的方法。
语法
class CComCriticalSection
成员
公共构造函数
名称 | 描述 |
---|---|
CComCriticalSection::CComCriticalSection | 构造函数。 |
公共方法
名称 | 描述 |
---|---|
CComCriticalSection::Init | 创建并初始化临界区对象。 |
CComCriticalSection::Lock | 获取临界区对象的所有权。 |
CComCriticalSection::Term | 释放临界区对象使用的系统资源。 |
CComCriticalSection::Unlock | 获取临界区对象的所有权。 |
公共数据成员
“属性” | 描述 |
---|---|
CComCriticalSection::m_sec | CRITICAL_SECTION 对象。 |
注解
CComCriticalSection
类似于 CComAutoCriticalSection 类,只不过必须显式初始化并释放临界区。
通常,通过 typedef
名称 AutoCriticalSection 使用 CComCriticalSection
。 使用 CComMultiThreadModel 时,此名称引用 CComCriticalSection
。
请参阅 CComCritSecLock 类,获取此类,此方法比直接调用 Lock
和 Unlock
更安全。
要求
标头:atlcom.h
CComCriticalSection::CComCriticalSection
构造函数。
CComCriticalSection() throw();
备注
将 m_sec 数据成员设置为 NULL。
CComCriticalSection::Init
调用 Win32 函数 InitializeCriticalSection,它会初始化 m_sec 中包含的临界区对象。
HRESULT Init() throw();
返回值
如果成功,返回 S_OK;如果失败,返回 E_OUTOFMEMORY 或 E_FAIL。
CComCriticalSection::Lock
调用 Win32 函数 EnterCriticalSection,等待线程获取 m_sec 数据成员中包含的关键节对象的所有权。
HRESULT Lock() throw();
返回值
如果成功,返回 S_OK;如果失败,返回 E_OUTOFMEMORY 或 E_FAIL。
备注
临界区对象必须首先调用 Init 方法进行初始化。 当受保护的代码完成执行后,线程必须调用 Unlock 才能释放临界区的所有权。
CComCriticalSection::m_sec
包含所有 CComCriticalSection
方法使用的临界区对象。
CRITICAL_SECTION m_sec;
CComCriticalSection::Term
调用 Win32 函数 DeleteCriticalSection,该函数释放 m_sec 数据成员中包含的临界区对象使用的所有资源。
HRESULT Term() throw();
返回值
返回 S_OK。
注解
调用 Term
后,临界区不能再用于同步。
CComCriticalSection::Unlock
调用 Win32 函数 LeaveCriticalSection,该函数释放 m_sec 数据成员中包含的临界区对象的所有权。
HRESULT Unlock() throw();
返回值
返回 S_OK。
备注
若要首先获取所有权,线程必须调用 Lock 方法。 每次调用 Lock
都需要相应的调用 Unlock
才能释放临界区的所有权。