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。