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