CComMultiThreadModel 类
CComMultiThreadModel
提供用于递增和递减变量值的线程安全方法。
语法
class CComMultiThreadModel
成员
公共 Typedef
公共方法
名称 | 描述 |
---|---|
CComMultiThreadModel::Decrement | (静态)以线程安全的方式递减指定变量的值。 |
CComMultiThreadModel::Increment | (静态)以线程安全的方式增加指定变量的值。 |
注解
通常,通过两个 typedef
名称之一(CComObjectThreadModel 或 CComGlobalsThreadModel)使用 CComMultiThreadModel
。 每个 typedef
引用的类取决于使用的线程模型,如下表所示:
typedef | 单线程处理 | 单元线程处理 | 免费线程处理 |
---|---|---|---|
CComObjectThreadModel |
S | S | M |
CComGlobalsThreadModel |
S | M | M |
S= CComSingleThreadModel
;M= CComMultiThreadModel
CComMultiThreadModel
本身定义 3 个 typedef
名称。
AutoCriticalSection
和 CriticalSection
引用类提供获取和释放关键节所有权的方法。
ThreadModelNoCS
引用类 [CComMultiThreadModelNoCS(ccommultithreadmodelnocs-class.md)。
要求
标头:atlbase.h
CComMultiThreadModel::AutoCriticalSection
使用 CComMultiThreadModel
时,typedef
名称 AutoCriticalSection
引用类 CComAutoCriticalSection 提供获取和释放关键节对象所有权的方法。
typedef CComAutoCriticalSection AutoCriticalSection;
注解
CComSingleThreadModel 和 CComMultiThreadModelNoCS 也包含 AutoCriticalSection
的定义。 下表显示了线程模型类与 AutoCriticalSection
引用的临界区类之间的关系:
类的定义位置 | 引用的类 |
---|---|
CComMultiThreadModel |
CComCriticalSection |
CComSingleThreadModel |
CComFakeCriticalSection |
CComMultiThreadModelNoCS |
CComFakeCriticalSection |
除了 AutoCriticalSection
之外,你还可以使用 typedef
名称 CriticalSection。 如果要消除 CRT 启动代码,则不应在全局对象或静态类成员中指定 AutoCriticalSection
。
示例
以下代码按照 CComObjectRootEx 进行建模,并演示如何在线程环境中使用 AutoCriticalSection
。
template<class ThreadModel>
class CMyAutoCritClass
{
public:
typedef ThreadModel _ThreadModel;
typedef typename _ThreadModel::AutoCriticalSection _CritSec;
CMyAutoCritClass() : m_dwRef(0) {}
ULONG InternalAddRef()
{
return _ThreadModel::Increment(&m_dwRef);
}
ULONG InternalRelease()
{
return _ThreadModel::Decrement(&m_dwRef);
}
void Lock() { m_critsec.Lock( ); }
void Unlock() { m_critsec.Unlock(); }
private:
_CritSec m_critsec;
LONG m_dwRef;
下表显示 InternalAddRef
和 Lock
方法的结果,具体取决于应用程序使用的 ThreadModel
模板参数和线程模型:
ThreadModel = CComObjectThreadModel
方法 | 单线程或单元线程处理 | 免费线程处理 |
---|---|---|
InternalAddRef |
增量不是线程安全的。 | 增量是线程安全的。 |
Lock |
不执行任何操作,因为没有要锁定的关键节。 | 关键节已锁定。 |
ThreadModel = CComObjectThreadModel::ThreadModelNoCS
方法 | 单线程或单元线程处理 | 免费线程处理 |
---|---|---|
InternalAddRef |
增量不是线程安全的。 | 增量是线程安全的。 |
Lock |
不执行任何操作,因为没有要锁定的关键节。 | 不执行任何操作,因为没有要锁定的关键节。 |
CComMultiThreadModel::CriticalSection
使用 CComMultiThreadModel
时,typedef
名称 CriticalSection
引用类 CComCriticalSection 提供获取和释放关键节对象所有权的方法。
typedef CComCriticalSection CriticalSection;
注解
CComSingleThreadModel 和 CComMultiThreadModelNoCS 也包含 CriticalSection
的定义。 下表显示了线程模型类与 CriticalSection
引用的临界区类之间的关系:
类的定义位置 | 引用的类 |
---|---|
CComMultiThreadModel |
CComCriticalSection |
CComSingleThreadModel |
CComFakeCriticalSection |
CComMultiThreadModelNoCS |
CComFakeCriticalSection |
除了 CriticalSection
之外,还可以使用 typedef
名称 AutoCriticalSection。 如果要消除 CRT 启动代码,则不应在全局对象或静态类成员中指定 AutoCriticalSection
。
示例
请参阅 CComMultiThreadModel::AutoCriticalSection。
CComMultiThreadModel::Decrement
此静态函数调用 Win32 函数 InterlockedDecrement,该函数将 p 指向的变量的值递减。
static ULONG WINAPI Decrement(LPLONG p) throw ();
参数
p
[in] 指向要递减的变量的指针。
返回值
如果递减的结果为 0,则 Decrement
返回 0。 如果递减的结果为非零,则返回值也为非零,但可能不等于递减的结果。
注解
InterlockedDecrement
可防止多个线程同时使用此变量。
CComMultiThreadModel::Increment
此静态函数调用 Win32 函数 InterlockedIncrement,该函数将 p 指向的变量的值递减。
static ULONG WINAPI Increment(LPLONG p) throw ();
参数
p
[in] 指向要递增的变量的指针。
返回值
如果递增的结果为 0,则 Increment
返回 0。 如果递增的结果为非零,则返回值也为非零,但可能不等于递增的结果。
注解
InterlockedIncrement
可防止多个线程同时使用此变量。
CComMultiThreadModel::ThreadModelNoCS
使用 CComMultiThreadModel
时,typedef
名称 ThreadModelNoCS
引用类 CComMultiThreadModelNoCS。
typedef CComMultiThreadModelNoCS ThreadModelNoCS;
注解
CComMultiThreadModelNoCS
提供用于递增和递减变量的线程安全方法;但不提供关键节。
CComSingleThreadModel 和 CComMultiThreadModelNoCS
还包含 ThreadModelNoCS
的定义。 下表显示了线程模型类与 ThreadModelNoCS
引用的类之间的关系:
类的定义位置 | 引用的类 |
---|---|
CComMultiThreadModel |
CComMultiThreadModelNoCS |
CComSingleThreadModel |
CComSingleThreadModel |
CComMultiThreadModelNoCS |
CComMultiThreadModelNoCS |
示例
请参阅 CComMultiThreadModel::AutoCriticalSection。
另请参阅
CComSingleThreadModel 类
CComAutoCriticalSection 类
CComCriticalSection 类
类概述