Udostępnij przez


Modele wątkowe COM+

Modele wątkowe COM+ są projektowane wokół kolekcji obiektów nazywanej mieszkaniem. Mieszkanie jest kolekcją kontekstów zawartych w procesie, jak pokazano na poniższej ilustracji.

Diagram przedstawiający kolekcję kontekstów w działaniu w mieszkaniu w ramach procesu.

Połączenia w mieszkaniu są bezpośrednie, podczas gdy połączenia między apartamentami (poza procesem) są pośrednie i wymagają kodu proxy i wycinków. Apartamenty w oprogramowaniu umożliwiają obiekty z różnymi właściwościami synchronizacji i ponownego wchodzenia oraz mają dwie kategorie: jednowątkowe i wielowątkowe. Obiekty w modelu STA na pojedynczym wątku działają na określonym wątku, w którym zostały utworzone. STA zezwalają na wykonywanie tylko jednej metody jednocześnie. Są one przeznaczone dla interfejsów użytkownika i polegają na kolejce komunikatów systemu Microsoft Windows do przetwarzania wywołań przychodzących.

Obiekty w wielowątkowym modelu (MTA) są wykonywane w dowolnym wątku i umożliwiają równoczesne wykonanie dowolnej liczby metod. MTAs obsługują ponowne wejście domyślnie.

Klasy COM+ są oznaczone właściwością ThreadingModel, która umożliwia modelu COM+ utworzenie obiektu we właściwym mieszkaniu. Aby określić, w którym mieszkaniu jest tworzony obiekt, CoCreateInstance używa właściwości ThreadingModel.

Wątki muszą najpierw wywołać CoInitializeEx, zanim będą mogły korzystać z modelu COM+. Spowoduje to utworzenie ich w odpowiednim mieszkaniu i kontekście. Główne mieszkanie wątku jest określane jako pierwszy STA wywoływany przez CoInitializeEx. Jest to zwykle skojarzone z głównym wątkiem procesu. CoInitializeEx wskazuje typ mieszkania wymaganego przez wątek, ustawiając następujące flagi:

  • COINIT_MULTITHREADED— umieszcza wątek w pojedynczym apartamencie wielowątkowym.
  • COINIT_APARTMENTTHREADED— umieszcza wątek w nowym stacie.

Poniższe tematy w tej sekcji zawierają więcej informacji na temat korzystania z modeli wątków i mieszkań w modelu COM+:

procesy, wątki i apartamenty

ThreadingModel