다음을 통해 공유


CComMultiThreadModel::AutoCriticalSection

 

사용 하는 경우 CComMultiThreadModel, typedef 이름 AutoCriticalSection 클래스를 참조 CComAutoCriticalSection, 얻고 중요 섹션 개체의 소유권을 해제에 대 한 방법을 제공 합니다.

구문

typedef CComAutoCriticalSection AutoCriticalSection;

설명

CComSingleThreadModelCComMultiThreadModelNoCS 에 대 한 정의 포함 AutoCriticalSection. 다음 표에서 참조 하 여 임계 클래스 및 스레딩 모델 클래스 간의 관계 AutoCriticalSection.

클래스 정의

클래스 참조

CComMultiThreadModel

CComCriticalSection

CComSingleThreadModel

CComFakeCriticalSection

CComMultiThreadModelNoCS

CComFakeCriticalSection

이외에 AutoCriticalSection, 사용할 수 있는 typedef 이름 CriticalSection. 지정 해야 AutoCriticalSection 에서 CRT 시작 코드를 제거 하려면 정적 클래스 멤버 또는 전역 개체입니다.

예제

다음 코드 모델로 CComObjectRootEx, 보여 줍니다 AutoCriticalSection 스레드 환경에서 사용 되 고 있습니다.

template< class ThreadModel >
class CMyAutoCritClass
{
public:
   typedef ThreadModel _ThreadModel;
   typedef typename _ThreadModel::AutoCriticalSection _CritSec;

   CMyAutoCritClass() : m_dwRef(0) {}

   ULONG InternalAddRef()
   {
      return _ThreadModel::Increment(&m_dwRef);
   }
   ULONG InternalRelease()
   {
      return _ThreadModel::Decrement(&m_dwRef);   
   }
   void Lock() { m_critsec.Lock( ); }
   void Unlock() { m_critsec.Unlock(); }

private:
   _CritSec m_critsec;
   LONG m_dwRef;
};

결과를 다음 표에 표시 된 InternalAddRefLock 방법에 따라는 ThreadModel 템플릿 매개 변수 및 응용 프로그램에서 사용 하는 스레딩 모델:

ThreadModel = CComObjectThreadModel

메서드

단일 또는 아파트 스레딩

자유 스레딩

InternalAddRef

증분 스레드로부터 안전 하지 않습니다.

스레드로부터 안전한 증분입니다.

Lock

아무 작업도 하지 않습니다. 잠글 수 없는 임계 영역이입니다.

중요 섹션은 잠깁니다.

ThreadModel = CComObjectThreadModel::ThreadModelNoCS

메서드

단일 또는 아파트 스레딩

자유 스레딩

InternalAddRef

증분 스레드로부터 안전 하지 않습니다.

스레드로부터 안전한 증분입니다.

Lock

아무 작업도 하지 않습니다. 잠글 수 없는 임계 영역이입니다.

아무 작업도 하지 않습니다. 잠글 수 없는 임계 영역이입니다.

요구 사항

헤더: atlbase.h

참고 항목

CComMultiThreadModel Class
CComObjectThreadModel
CComGlobalsThreadModel
CComMultiThreadModel::ThreadModelNoCS