CComMultiThreadModelNoCS Class
CComMultiThreadModelNoCS
には、クリティカル セクションのロックまたはロック解除機能を使用せずに、変数の値をインクリメントおよびデクリメントするためのスレッドセーフなメソッドが用意されています。
構文
class CComMultiThreadModelNoCS
メンバー
パブリック typedef
名前 | 説明 |
---|---|
CComMultiThreadModelNoCS::AutoCriticalSection | CComFakeCriticalSection クラスを参照します。 |
CComMultiThreadModelNoCS::CriticalSection | CComFakeCriticalSection クラスを参照します。 |
CComMultiThreadModelNoCS::ThreadModelNoCS | CComMultiThreadModelNoCS クラスを参照します。 |
パブリック メソッド
名前 | 説明 |
---|---|
CComMultiThreadModelNoCS::Decrement | (静的) スレッドセーフな方法で指定された変数の値をデクリメントします。 |
CComMultiThreadModelNoCS::Increment | (静的) スレッドセーフな方法で指定された変数の値をインクリメントします。 |
解説
CComMultiThreadModelNoCS
は、変数をインクリメントおよびデクリメントするためのスレッドセーフなメソッドを備えているという点で、CComMultiThreadModel に似ています。 ただし、CComMultiThreadModelNoCS
を介してクリティカル セクション クラスを参照する場合、Lock
や Unlock
などのメソッドでは何も行われません。
通常は、ThreadModelNoCS
typedef
名でCComMultiThreadModelNoCS
を使用します。 この typedef
は、CComMultiThreadModelNoCS
、CComMultiThreadModel
、および CComSingleThreadModel で定義されています。
Note
グローバルな typedef
名である CComObjectThreadModel および CComGlobalsThreadModel によって、CComMultiThreadModelNoCS
が参照されることはありません。
ThreadModelNoCS
に加えて、CComMultiThreadModelNoCS
では、AutoCriticalSection
および CriticalSection
が定義されます。 この後者の 2 つの 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
[入力] デクリメントする変数を指すポインター。
戻り値
デクリメントの結果が 0 である場合、Decrement
からは 0 が返されます。 デクリメントの結果が 0 以外の場合、戻り値も 0 以外になりますが、デクリメントの結果とは一致しない可能性があります。
解説
InterlockedDecrement により、複数のスレッドでこの変数が同時に使用されるのを防ぐことができます。
CComMultiThreadModelNoCS::Increment
この静的関数によって Win32 関数 InterlockedIncrement が呼び出され、それにより、p によって指し示される変数の値がディクリメントされます。
static ULONG WINAPI Increment(LPLONG p) throw();
パラメーター
P
[入力] インクリメントする変数を指すポインター。
戻り値
インクリメントの結果が 0 である場合、Increment から 0 が返されます。 インクリメントの結果が 0 以外の場合、戻り値も 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」を参照してください。