次の方法で共有


CComMultiThreadModelNoCS Class

CComMultiThreadModelNoCS には、クリティカル セクションのロックまたはロック解除機能を使用せずに、変数の値をインクリメントおよびデクリメントするためのスレッドセーフなメソッドが用意されています。

構文

class CComMultiThreadModelNoCS

メンバー

パブリック typedef

名前 説明
CComMultiThreadModelNoCS::AutoCriticalSection CComFakeCriticalSection クラスを参照します。
CComMultiThreadModelNoCS::CriticalSection CComFakeCriticalSection クラスを参照します。
CComMultiThreadModelNoCS::ThreadModelNoCS CComMultiThreadModelNoCS クラスを参照します。

パブリック メソッド

名前 説明
CComMultiThreadModelNoCS::Decrement (静的) スレッドセーフな方法で指定された変数の値をデクリメントします。
CComMultiThreadModelNoCS::Increment (静的) スレッドセーフな方法で指定された変数の値をインクリメントします。

解説

CComMultiThreadModelNoCS は、変数をインクリメントおよびデクリメントするためのスレッドセーフなメソッドを備えているという点で、CComMultiThreadModel に似ています。 ただし、CComMultiThreadModelNoCS を介してクリティカル セクション クラスを参照する場合、LockUnlock などのメソッドでは何も行われません。

通常は、ThreadModelNoCS typedef名でCComMultiThreadModelNoCSを使用します。 この typedef は、CComMultiThreadModelNoCSCComMultiThreadModel、および 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」を参照してください。

関連項目

クラスの概要