element TypeDef CComAutoCriticalSection AutoCriticalSection;
Uwagi
Podczas korzystania z CComMultiThreadModel, nazwa elementu typedef AutoCriticalSection odwołuje się do klasy CComAutoCriticalSection, który dostarcza metody uzyskiwania i zwalnianie własności obiektu sekcji krytycznej.
CComSingleThreadModel i CComMultiThreadModelNoCS zawierają także definicje dla AutoCriticalSection. W poniższej tabeli przedstawiono relacje między klasę modelu wątków i odwołania klasy sekcji krytycznej przez AutoCriticalSection:
| Klasa zdefiniowana w | Klasa odwołania |
| CComMultiThreadModel | CComCriticalSection |
| CComSingleThreadModel | CComFakeCriticalSection |
| CComMultiThreadModelNoCS | CComFakeCriticalSection |
Oprócz AutoCriticalSectionmożna użyć nazwy elementu typedef CriticalSection. Należy nie określić AutoCriticalSection obiekty globalne lub elementów klas statycznych Jeśli chcesz wyeliminować kod uruchamiający CRT.
Przykład
Poniższy kod jest pobierana z CComObjectRootEx.
templatelt; Klasa ThreadModel >
Klasa CComObjectRootEx: CComObjectRootBase publicznych
{
publiczne:
element TypeDef ThreadModel _ThreadModel;
element TypeDef _ThreadModel::AutoCriticalSection _CritSec;
ULONG InternalAddRef)
{
...
Zwraca _ThreadModel::Increment(&m_dwRef);
}
...
Unieważnij Lock () {m_critsec.Blokada (); }
...
prywatne:
_CritSec m_critsec;
}
W poniższych tabelach przedstawiono wyniki metody InternalAddRef i Lock , w zależności od parametrów szablonu ThreadModel i model wątka używany przez aplikację:
ThreadModel = CComObjectThreadModel
| Pojedyncze lub Apartament | Wolne | |
| InternalAddRef | Przyrost nie jest bezpieczne wątek. | Przyrost jest odławiany w wątku. |
| Zablokuj | Does; nie ma żadnych sekcji krytycznej, aby zablokować. | Sekcję krytyczną jest zablokowany. |
ThreadModel = CComObjectThreadModel::ThreadModelNoCS
| Pojedyncze lub Apartament | Wolne | |
| InternalAddRef | Przyrost nie jest bezpieczne wątek. | Przyrost jest odławiany w wątku. |
| Zablokuj | Does; nie ma żadnych sekcji krytycznej, aby zablokować. | Does; nie ma żadnych sekcji krytycznej, aby zablokować. |
Omówie&nie CComMultiThreadModel |nbsp; Członkowie klasy
Zobacz teżnbsp;CComObjectThreadModel, CComGlobalsThreadModel, CComMultiThreadModel::ThreadModel&NoCS