COINIT 列挙 (objbase.h)

このスレッドによって作成されたオブジェクトへの着信呼び出しに使用されるコンカレンシー モデルを決定します。 このコンカレンシー モデルは、アパートメント スレッドまたはマルチスレッドにすることができます。

構文

typedef enum tagCOINIT {
  COINIT_APARTMENTTHREADED = 0x2,
  COINIT_MULTITHREADED,
  COINIT_DISABLE_OLE1DDE = 0x4,
  COINIT_SPEED_OVER_MEMORY = 0x8
} COINIT;

定数

 
COINIT_APARTMENTTHREADED
値: 0x2
アパートメント スレッド オブジェクトのコンカレンシーのスレッドを初期化します (「解説」を参照)。
COINIT_MULTITHREADED
マルチスレッド オブジェクトのコンカレンシー用にスレッドを初期化します (「解説」を参照)。
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

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