Udostępnij za pośrednictwem


ATL i marshaler trybu wolnych wątków

Strona Atrybuty kreatora prostych obiektów ATL udostępnia opcję, która umożliwia klasie agregowanie wolnych marshalerów wątkowych (FTM).

Kreator generuje kod w celu utworzenia wystąpienia bezpłatnego marshalera wątkowego w FinalConstruct programie i wydania tego wystąpienia w programie FinalRelease. Makro COM_INTERFACE_ENTRY_AGGREGATE jest automatycznie dodawane do mapy COM, aby upewnić się, że QueryInterface żądania dla IMarshal są obsługiwane przez wolny marshaler wątkowy.

Wolny marshaler wątkowy umożliwia bezpośredni dostęp do interfejsów w obiekcie z dowolnego wątku w tym samym procesie, przyspieszając wywołania między apartamentami. Ta opcja jest przeznaczona dla klas używających modelu Obu wątków.

W przypadku korzystania z tej opcji klasy muszą brać na siebie odpowiedzialność za bezpieczeństwo wątków swoich danych. Ponadto obiekty, które agregują wolny marshaler wątkowy i muszą używać wskaźników interfejsu uzyskanych z innych obiektów, muszą wykonać dodatkowe kroki, aby upewnić się, że interfejsy są prawidłowo marshalowane. Zazwyczaj polega to na przechowywaniu wskaźników interfejsu w globalnej tabeli interfejsu (GIT) i pobieraniu wskaźnika z usługi GIT za każdym razem, gdy jest używany. AtL udostępnia klasę CComGITPtr , która ułatwia korzystanie ze wskaźników interfejsu przechowywanych w usłudze GIT.

Zobacz też

Pojęcia
CoCreateFreeThreadedMarshaler
IMarshal
Kiedy używać tabeli interfejsu globalnego
Problemy wątkowe serwera przetwarzania