다음을 통해 공유


CComMultiThreadModel 클래스

CComMultiThreadModel 는 변수 값을 증가시키고 감소시키는 스레드로부터 안전한 메서드를 제공합니다.

구문

class CComMultiThreadModel

멤버

공용 Typedefs

속성 설명
CComMultiThreadModel::AutoCriticalSection CComAutoCriticalSection 클래스를 참조합니다.
CComMultiThreadModel::CriticalSection CComCriticalSection 클래스를 참조합니다.
CComMultiThreadModel::ThreadModelNoCS CComMultiThreadModelNoCS 클래스 를 참조합니다.

공용 메서드

이름 설명
CComMultiThreadModel::D ecrement (정적) 스레드로부터 안전한 방식으로 지정된 변수의 값을 줄입니다.
CComMultiThreadModel::Increment (정적) 스레드로부터 안전한 방식으로 지정된 변수의 값을 증분합니다.

설명

일반적으로 [CComObjectThreadModel](atl-typedefs.md#ccomobjectthreadmodel 또는 [CComGlobalsThreadModel](atl-typedefs.md#ccomglobalsthreadmodel)의 두 typedef 이름 중 하나를 사용합니다CComMultiThreadModel. 각 typedef 클래스가 참조하는 클래스는 다음 표와 같이 사용되는 스레딩 모델에 따라 달라집니다.

typedef 단일 스레딩 아파트 스레딩 무료 스레딩
CComObjectThreadModel S S M
CComGlobalsThreadModel S M M

S= CComSingleThreadModel; M= CComMultiThreadModel

CComMultiThreadModel 자체에서 세 typedef 개의 이름을 정의합니다. AutoCriticalSectionCriticalSection 중요한 섹션의 소유권을 가져오고 해제하는 메서드를 제공하는 참조 클래스입니다. ThreadModelNoCS 참조 클래스 [CComMultiThreadModelNoCS(ccommultithreadmodelnocs-class.md).

요구 사항

헤더: atlbase.h

CComMultiThreadModel::AutoCriticalSection

사용하는 CComMultiThreadModeltypedef 경우 이름은 AutoCriticalSection 중요한 섹션 개체의 소유권을 가져오고 해제하는 메서드를 제공하는 CComAutoCriticalSection 클래스를 참조합니다.

typedef CComAutoCriticalSection AutoCriticalSection;

설명

CComSingleThreadModelCComMultiThreadModelNoCS 에 대한 AutoCriticalSection정의도 포함되어 있습니다. 다음 표에서는 스레딩 모델 클래스와 참조 AutoCriticalSection하는 중요 섹션 클래스 간의 관계를 보여 줍니다.

에 정의된 클래스 참조된 클래스
CComMultiThreadModel CComCriticalSection
CComSingleThreadModel CComFakeCriticalSection
CComMultiThreadModelNoCS CComFakeCriticalSection

또한 AutoCriticalSectionCriticalSection이라는 이름을 사용할 typedef 수 있습니다. CRT 시작 코드를 제거하려는 경우 전역 개체 또는 정적 클래스 멤버를 지정 AutoCriticalSection 해서는 안 됩니다.

예시

다음 코드는 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;

다음 표에서는 템플릿 매개 변수 및 애플리케이션에서 InternalAddRef 사용하는 스레딩 모델에 따라 ThreadModel 메서드와 메서드의 결과를 보여 Lock 줍니다.

ThreadModel = CComObjectThreadModel

메서드 단일 또는 아파트 스레딩 무료 스레딩
InternalAddRef 증가는 스레드로부터 안전하지 않습니다. 증가는 스레드로부터 안전합니다.
Lock 아무 것도 수행하지 않습니다. 잠글 중요한 섹션이 없습니다. 중요한 섹션이 잠겨 있습니다.

ThreadModel = CComObjectThreadModel::ThreadModelNoCS

메서드 단일 또는 아파트 스레딩 무료 스레딩
InternalAddRef 증가는 스레드로부터 안전하지 않습니다. 증가는 스레드로부터 안전합니다.
Lock 아무 것도 수행하지 않습니다. 잠글 중요한 섹션이 없습니다. 아무 것도 수행하지 않습니다. 잠글 중요한 섹션이 없습니다.

CComMultiThreadModel::CriticalSection

사용하는 CComMultiThreadModeltypedef 경우 이름은 CriticalSection CComCriticalSection 클래스를 참조하며, 이 클래스는 중요한 섹션 개체의 소유권을 가져오고 해제하는 메서드를 제공합니다.

typedef CComCriticalSection CriticalSection;

설명

CComSingleThreadModelCComMultiThreadModelNoCS 에 대한 CriticalSection정의도 포함되어 있습니다. 다음 표에서는 스레딩 모델 클래스와 참조 CriticalSection하는 중요 섹션 클래스 간의 관계를 보여 줍니다.

에 정의된 클래스 참조된 클래스
CComMultiThreadModel CComCriticalSection
CComSingleThreadModel CComFakeCriticalSection
CComMultiThreadModelNoCS CComFakeCriticalSection

또한 CriticalSectionAutoCriticalSection이라는 이름을 사용할 typedef 수 있습니다. CRT 시작 코드를 제거하려는 경우 전역 개체 또는 정적 클래스 멤버를 지정 AutoCriticalSection 해서는 안 됩니다.

예시

CComMultiThreadModel::AutoCriticalSection을 참조하세요.

CComMultiThreadModel::D ecrement

이 정적 함수는 P가 가리키는 변수의 값을 감소시키는 Win32 함수 InterlockedDecrement호출합니다.

static ULONG WINAPI Decrement(LPLONG p) throw ();

매개 변수

p
[in] 감소할 변수에 대한 포인터입니다.

Return Value

감소 결과가 0이면 0 Decrement 을 반환합니다. 감소 결과가 0이 아닌 경우 반환 값도 0이 아니지만 감소의 결과와 같지 않을 수 있습니다.

설명

InterlockedDecrement 는 둘 이상의 스레드가 동시에 이 변수를 사용하지 못하도록 합니다.

CComMultiThreadModel::Increment

이 정적 함수는 P가 가리키는 변수의 값을 증가시키는 Win32 함수 InterlockedIncrement호출합니다.

static ULONG WINAPI Increment(LPLONG p) throw ();

매개 변수

p
[in] 증분할 변수에 대한 포인터입니다.

Return Value

증분 결과가 0이면 0 Increment 을 반환합니다. 증분 결과가 0이 아닌 경우 반환 값도 0이 아니지만 증분 결과와 같지 않을 수 있습니다.

설명

InterlockedIncrement 는 둘 이상의 스레드가 동시에 이 변수를 사용하지 못하도록 합니다.

CComMultiThreadModel::ThreadModelNoCS

사용할 CComMultiThreadModel때 이름은 ThreadModelNoCS CComMultiThreadModelNoCS 클래스를 참조합니다.typedef

typedef CComMultiThreadModelNoCS ThreadModelNoCS;

설명

CComMultiThreadModelNoCS 는 변수를 증가 및 감소시키는 스레드로부터 안전한 메서드를 제공합니다. 그러나 중요한 섹션은 제공하지 않습니다.

CComSingleThreadModelCComMultiThreadModelNoCS 에 대한 ThreadModelNoCS정의도 포함됩니다. 다음 표에서는 스레딩 모델 클래스와 참조되는 ThreadModelNoCS클래스 간의 관계를 보여 줍니다.

에 정의된 클래스 참조된 클래스
CComMultiThreadModel CComMultiThreadModelNoCS
CComSingleThreadModel CComSingleThreadModel
CComMultiThreadModelNoCS CComMultiThreadModelNoCS

예시

CComMultiThreadModel::AutoCriticalSection을 참조하세요.

참고 항목

CComSingleThreadModel 클래스
CComAutoCriticalSection 클래스
CComCriticalSection 클래스
클래스 개요