CComMultiThreadModelNoCS 提供線程安全的方法,可遞增和遞減變數的值,而不需要關鍵區段鎖定或解除鎖定功能。
語法
class CComMultiThreadModelNoCS
成員
公用 Typedefs
| 名稱 | 描述 |
|---|---|
| CComMultiThreadModelNoCS::AutoCriticalSection | 參考類別 CComFakeCriticalSection。 |
| CComMultiThreadModelNoCS::CriticalSection | 參考類別 CComFakeCriticalSection。 |
| CComMultiThreadModelNoCS::ThreadModelNoCS | 參考類別 CComMultiThreadModelNoCS。 |
公用方法
| 名稱 | 描述 |
|---|---|
| CComMultiThreadModelNoCS::D ecrement | (靜態)以安全線程的方式遞減指定變數的值。 |
| CComMultiThreadModelNoCS::Increment | (靜態)以安全線程的方式遞增指定變數的值。 |
備註
CComMultiThreadModelNoCS類似於 CComMultiThreadModel,因為它提供安全線程的方法,以遞增和遞減變數。 不過,當您透過 CComMultiThreadModelNoCS參考重要區段類別時,例如 Lock 和 Unlock 等方法不會執行任何動作。
一般而言,您會透過ThreadModelNoCStypedef名稱使用 CComMultiThreadModelNoCS 。 這是typedef在 、 CComMultiThreadModel和 CComSingleThreadModel 中CComMultiThreadModelNoCS定義。
注意
全域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::D ecrement
此靜態函式會呼叫 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。