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 番目のパラメーターとして指定することで、スレッドをアパートメント スレッドまたはマルチスレッドとして初期化するかどうかを選択します。 これは、そのスレッドによって作成されたオブジェクトへの着信呼び出しを処理する方法、つまりオブジェクトのコンカレンシーを指定します。

アパートメント スレッドは、複数のスレッドの実行を許可しながら、このスレッドによって作成されたオブジェクトのメソッドへの呼び出しを常に同じスレッド (つまり、それらを作成したアパートメント/スレッド) で実行するように要求することで、すべての着信呼び出しをシリアル化します。 さらに、呼び出しはメッセージ キューの境界でのみ到着できます。 このシリアル化のため、通常は、他のメソッド呼び出しや同じアパートメント/スレッド内の他のオブジェクトの呼び出しによって中断してはならない処理中に PeekMessageSendMessage の呼び出しを回避する以外に、オブジェクトのコードにコンカレンシー制御を記述する必要はありません。

マルチスレッド (フリー スレッドとも呼ばれます) を使用すると、このスレッドによって作成されたオブジェクトのメソッドの呼び出しを任意のスレッドで実行できます。 呼び出しのシリアル化はありません。つまり、同じメソッドまたは同じオブジェクトに対して、または同時に多くの呼び出しが発生する可能性があります。 マルチスレッド オブジェクトコンカレンシーは最高のパフォーマンスを提供し、オブジェクトへの呼び出しはシリアル化されないため、クロススレッド、クロスプロセス、およびマシン間の呼び出しに対してマルチプロセッサ ハードウェアの最適な利点を利用します。 ただし、これは、オブジェクトのコードが独自のコンカレンシー モデルを適用する必要があることを意味します。通常は、重要なセクション、セマフォ、ミューテックスなどの同期プリミティブを使用します。 さらに、 オブジェクトはアクセスしているスレッドの有効期間を制御しないため、スレッド固有の状態をオブジェクトに格納することはできません ( スレッド ローカル ストレージ内)。

メモ マルチスレッド アパートメントは、GUI 以外のスレッドで使用することを目的としています。 マルチスレッド アパートメント内のスレッドは、UI アクションを実行しないでください。 これは、UI スレッドにはメッセージ ポンプが必要であり、COM はマルチスレッド アパートメント内のスレッドのメッセージをポンプしないためです。
 

要件

要件
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ]
Header objbase.h

こちらもご覧ください

CoInitializeEx

IInitializeSpy::P ostInitialize

IInitializeSpy::P reInitialize

プロセス、スレッド、およびアパートメント