CComMultiThreadModelNoCS 类
CComMultiThreadModelNoCS
提供用于递增和递减变量值的线程安全方法,而无需关键部分锁定或解锁功能。
语法
class CComMultiThreadModelNoCS
成员
公共 Typedef
名称 | 描述 |
---|---|
CComMultiThreadModelNoCS::AutoCriticalSection | 引用类 CComFakeCriticalSection。 |
CComMultiThreadModelNoCS::CriticalSection | 引用类 CComFakeCriticalSection 。 |
CComMultiThreadModelNoCS::ThreadModelNoCS | 引用类 CComMultiThreadModelNoCS 。 |
公共方法
名称 | 描述 |
---|---|
CComMultiThreadModelNoCS::Decrement | (静态)以线程安全的方式递减指定变量的值。 |
CComMultiThreadModelNoCS::Increment | (静态)以线程安全的方式增加指定变量的值。 |
备注
CComMultiThreadModelNoCS
类似于 CComMultiThreadModel,因为它提供了用于递增和递减变量的线程安全方法。 但是,当你通过 CComMultiThreadModelNoCS
引用临界区类时,诸如 Lock
和 Unlock
之类的方法将不起作用。
通常,通过名称使用 CComMultiThreadModelNoCS
ThreadModelNoCS
typedef
。 此 typedef
是在 CComMultiThreadModelNoCS
、CComMultiThreadModel
和 CComSingleThreadModel 中定义的。
注意
全局 typedef
名称 CComObjectThreadModel 和 CComGlobalsThreadModel 不会引用 CComMultiThreadModelNoCS
。
除了 ThreadModelNoCS
之外CComMultiThreadModelNoCS
还会定义 AutoCriticalSection
和 CriticalSection
。 后两个 typedef
名称引用 CComFakeCriticalSection,它提供与获取和释放临界区相关的空方法。
要求
标头:atlbase.h
CComMultiThreadModelNoCS::AutoCriticalSection
使用 CComMultiThreadModelNoCS
时,typedef
名称 AutoCriticalSection
引用类 CComFakeCriticalSection。
typedef CComFakeCriticalSection AutoCriticalSection;
注解
由于 CComFakeCriticalSection
不提供临界区,因此其方法不执行任何操作。
CComMultiThreadModel 和 CComSingleThreadModel 还包含 AutoCriticalSection
的定义。 下表显示了线程模型类与 AutoCriticalSection
引用的临界区类之间的关系:
类的定义位置 | 引用的类 |
---|---|
CComMultiThreadModelNoCS |
CComFakeCriticalSection |
CComMultiThreadModel |
CComAutoCriticalSection |
CComSingleThreadModel |
CComFakeCriticalSection |
除了 AutoCriticalSection
之外,你还可以使用 typedef
名称 CriticalSection。 如果要消除 CRT 启动代码,则不应在全局对象或静态类成员中指定 AutoCriticalSection
。
示例
请参阅 CComMultiThreadModel::AutoCriticalSection。
CComMultiThreadModelNoCS::CriticalSection
使用 CComMultiThreadModelNoCS
时,typedef
名称 CriticalSection
引用类 CComFakeCriticalSection。
typedef CComFakeCriticalSection CriticalSection;
注解
由于 CComFakeCriticalSection
不提供临界区,因此其方法不执行任何操作。
CComMultiThreadModel 和 CComSingleThreadModel 还包含 CriticalSection
的定义。 下表显示了线程模型类与 CriticalSection
引用的临界区类之间的关系:
类的定义位置 | 引用的类 |
---|---|
CComMultiThreadModelNoCS |
CComFakeCriticalSection |
CComMultiThreadModel |
CComCriticalSection |
CComSingleThreadModel |
CComFakeCriticalSection |
除了 CriticalSection
之外,还可以使用 typedef
名称 AutoCriticalSection
。 如果要消除 CRT 启动代码,则不应在全局对象或静态类成员中指定 AutoCriticalSection
。
示例
请参阅 CComMultiThreadModel::AutoCriticalSection。
CComMultiThreadModelNoCS::Decrement
此静态函数调用 Win32 函数 InterlockedDecrement,该函数将 p 指向的变量的值递减。
static ULONG WINAPI Decrement(LPLONG p) throw();
参数
p
[in] 指向要递减的变量的指针。
返回值
如果递减的结果为 0,则 Decrement
返回 0。 如果递减的结果为非零,则返回值也为非零,但可能不等于递减的结果。
备注
InterlockedDecrement 可防止多个线程同时使用此变量。
CComMultiThreadModelNoCS::Increment
此静态函数调用 Win32 函数 InterlockedIncrement,该函数将 p 指向的变量的值递减。
static ULONG WINAPI Increment(LPLONG p) throw();
参数
p
[in] 指向要递增的变量的指针。
返回值
如果增量的结果为 0,则 Increment 返回 0。 如果递增的结果为非零,则返回值也为非零,但可能不等于递增的结果。
备注
InterlockedIncrement 可防止多个线程同时使用此变量。
CComMultiThreadModelNoCS::ThreadModelNoCS
使用 CComMultiThreadModelNoCS
时,typedef
名称 ThreadModelNoCS
只是引用 CComMultiThreadModelNoCS
。
typedef CComMultiThreadModelNoCS ThreadModelNoCS;
注解
CComMultiThreadModel 和 CComSingleThreadModel 还包含 ThreadModelNoCS
的定义。 下表显示了线程模型类与 ThreadModelNoCS
引用的类之间的关系:
类的定义位置 | 引用的类 |
---|---|
CComMultiThreadModelNoCS |
CComMultiThreadModelNoCS |
CComMultiThreadModel |
CComMultiThreadModelNoCS |
CComSingleThreadModel |
CComSingleThreadModel |
请注意,CComMultiThreadModelNoCS
中 ThreadModelNoCS
的定义提供了与 CComMultiThreadModel
和 CComSingleThreadModel
的对称性。 例如,假设 CComMultiThreadModel::AutoCriticalSection
中的示例代码声明了以下 typedef
:
typedef typename ThreadModel::ThreadModelNoCS _ThreadModel;
无论为 ThreadModel
指定的类(例如 CComMultiThreadModelNoCS
)如何,_ThreadModel
都会相应地解析。
示例
请参阅 CComMultiThreadModel::AutoCriticalSection。