Share via


COM+スレッドモデル

COM+スレッドモデルは、アパートメントと呼ばれるオブジェクトコレクションを中心に設計されています。 アパートメントは、次の図に示すように、プロセスに含まれるコンテキストのコレクションです。

各プロセス、アパートメント、アクティビティ内のコンテキストのコレクションを示す図。

アパートメント内の呼び出しは直接ですが、アパートメント間の呼び出し(アウトプロセス)は間接的であり、プロキシとスタブコードが必要です。 アパートメントでは、異なる同期プロパティと再入プロパティを持つオブジェクトを使用でき、シングルスレッドとマルチスレッドの2つのカテゴリがあります。 シングルスレッドアパートメント(STA)内のオブジェクトは、そのオブジェクトが作成された特定のスレッドで実行されます。 STAでは、一度に実行できるメソッドは1つだけです。 これらはユーザーインターフェイス用に設計されており、Microsoft Windowsメッセージキューに依存して着信呼び出しを処理します。

マルチスレッドアパートメント(MTA)内のオブジェクトは任意のスレッドで実行され、任意の数のメソッドを同時に発生させることができます。 MTAは、再入を暗黙的にサポートします。

COM+クラスはThreadingModelプロパティでマークされており、これによりCOM+は適切なアパートメントでオブジェクトを作成できます。 オブジェクトを作成するアパートメントを決定するために、CoCreateInstanceThreadingModelプロパティを使用します。

スレッドはCOM+を使用する前にCoInitializeExを呼び出す必要があります。 これにより、正しいアパートメントとコンテキスト内に作成されます。 メインのスレッドアパートメントが決定されると、CoInitializeExが呼び出す最初のSTAになります。 これは通常、プロセスのメインスレッドに関連付けられます。 CoInitializeExは以下のフラグを設定して、スレッドが要求するアパートメントのタイプを示します。

  • COINIT_MULTITHREADED—単一のマルチスレッドアパートメントにスレッドを配置します。
  • COINIT_APARTMENTTHREADED—スレッドを新しいSTAに配置します。

このセクションの次のトピックでは、COM+でのスレッドモデルとアパートメントの使用の詳細について説明します。

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

ThreadingModel