COINIT 列挙 (objbase.h)
このスレッドによって作成されたオブジェクトへの着信呼び出しに使用されるコンカレンシー モデルを決定します。 このコンカレンシー モデルには、アパートメント スレッドまたはマルチスレッドのいずれかを指定できます。
構文
typedef enum tagCOINIT {
COINIT_APARTMENTTHREADED = 0x2,
COINIT_MULTITHREADED = 0x0,
COINIT_DISABLE_OLE1DDE = 0x4,
COINIT_SPEED_OVER_MEMORY = 0x8
} COINIT;
定数
COINIT_APARTMENTTHREADED 値: 0x2 アパートメント スレッド オブジェクトのコンカレンシーのスレッドを初期化します (「解説」を参照)。 |
COINIT_MULTITHREADED 値: 0x0 マルチスレッド オブジェクトのコンカレンシー用にスレッドを初期化します (「解説」を参照)。 |
COINIT_DISABLE_OLE1DDE 値: 0x4 OLE1 の DDE のサポートを無効にします。 |
COINIT_SPEED_OVER_MEMORY 値: 0x8 パフォーマンスを向上させるためにメモリ使用量を増やします。 |
注釈
スレッドが CoInitializeEx の呼び出しによって初期化される場合は、COINIT のメンバーの 1 つを 2 番目のパラメーターとして指定することで、スレッドをアパートメント スレッドまたはマルチスレッドとして初期化するかどうかを選択します。 これは、そのスレッドによって作成されたオブジェクトへの着信呼び出しを処理する方法、つまりオブジェクトのコンカレンシーを指定します。
アパートメント スレッドは、複数のスレッドの実行を許可しながら、このスレッドによって作成されたオブジェクトのメソッドへの呼び出しを常に同じスレッド (つまり、それらを作成したアパートメント/スレッド) で実行するように要求することで、すべての着信呼び出しをシリアル化します。 さらに、呼び出しはメッセージ キューの境界でのみ到着できます。 このシリアル化のため、通常は、他のメソッド呼び出しや同じアパートメント/スレッド内の他のオブジェクトの呼び出しによって中断してはならない処理中に PeekMessage と SendMessage の呼び出しを回避する以外に、オブジェクトのコードにコンカレンシー制御を記述する必要はありません。
マルチスレッド (フリー スレッドとも呼ばれます) を使用すると、このスレッドによって作成されたオブジェクトのメソッドの呼び出しを任意のスレッドで実行できます。 呼び出しのシリアル化はありません。つまり、同じメソッドまたは同じオブジェクトに対して、または同時に多くの呼び出しが発生する可能性があります。 マルチスレッド オブジェクトコンカレンシーは最高のパフォーマンスを提供し、オブジェクトへの呼び出しはシリアル化されないため、クロススレッド、クロスプロセス、およびマシン間の呼び出しに対してマルチプロセッサ ハードウェアの最適な利点を利用します。 ただし、これは、オブジェクトのコードが独自のコンカレンシー モデルを適用する必要があることを意味します。通常は、重要なセクション、セマフォ、ミューテックスなどの同期プリミティブを使用します。 さらに、 オブジェクトはアクセスしているスレッドの有効期間を制御しないため、スレッド固有の状態をオブジェクトに格納することはできません ( スレッド ローカル ストレージ内)。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 2000 Professional [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows 2000 Server [デスクトップ アプリのみ] |
Header | objbase.h |
こちらもご覧ください
IInitializeSpy::P ostInitialize