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
개의 이름을 정의합니다. AutoCriticalSection
및 CriticalSection
중요한 섹션의 소유권을 가져오고 해제하는 메서드를 제공하는 참조 클래스입니다. ThreadModelNoCS
참조 클래스 [CComMultiThreadModelNoCS(ccommultithreadmodelnocs-class.md).
요구 사항
헤더: atlbase.h
CComMultiThreadModel::AutoCriticalSection
사용하는 CComMultiThreadModel
typedef
경우 이름은 AutoCriticalSection
중요한 섹션 개체의 소유권을 가져오고 해제하는 메서드를 제공하는 CComAutoCriticalSection 클래스를 참조합니다.
typedef CComAutoCriticalSection AutoCriticalSection;
설명
CComSingleThreadModel 및 CComMultiThreadModelNoCS 에 대한 AutoCriticalSection
정의도 포함되어 있습니다. 다음 표에서는 스레딩 모델 클래스와 참조 AutoCriticalSection
하는 중요 섹션 클래스 간의 관계를 보여 줍니다.
에 정의된 클래스 | 참조된 클래스 |
---|---|
CComMultiThreadModel |
CComCriticalSection |
CComSingleThreadModel |
CComFakeCriticalSection |
CComMultiThreadModelNoCS |
CComFakeCriticalSection |
또한 AutoCriticalSection
CriticalSection이라는 이름을 사용할 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
사용하는 CComMultiThreadModel
typedef
경우 이름은 CriticalSection
CComCriticalSection 클래스를 참조하며, 이 클래스는 중요한 섹션 개체의 소유권을 가져오고 해제하는 메서드를 제공합니다.
typedef CComCriticalSection CriticalSection;
설명
CComSingleThreadModel 및 CComMultiThreadModelNoCS 에 대한 CriticalSection
정의도 포함되어 있습니다. 다음 표에서는 스레딩 모델 클래스와 참조 CriticalSection
하는 중요 섹션 클래스 간의 관계를 보여 줍니다.
에 정의된 클래스 | 참조된 클래스 |
---|---|
CComMultiThreadModel |
CComCriticalSection |
CComSingleThreadModel |
CComFakeCriticalSection |
CComMultiThreadModelNoCS |
CComFakeCriticalSection |
또한 CriticalSection
AutoCriticalSection이라는 이름을 사용할 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
는 변수를 증가 및 감소시키는 스레드로부터 안전한 메서드를 제공합니다. 그러나 중요한 섹션은 제공하지 않습니다.
CComSingleThreadModel 및 CComMultiThreadModelNoCS
에 대한 ThreadModelNoCS
정의도 포함됩니다. 다음 표에서는 스레딩 모델 클래스와 참조되는 ThreadModelNoCS
클래스 간의 관계를 보여 줍니다.
에 정의된 클래스 | 참조된 클래스 |
---|---|
CComMultiThreadModel |
CComMultiThreadModelNoCS |
CComSingleThreadModel |
CComSingleThreadModel |
CComMultiThreadModelNoCS |
CComMultiThreadModelNoCS |
예시
CComMultiThreadModel::AutoCriticalSection을 참조하세요.
참고 항목
CComSingleThreadModel 클래스
CComAutoCriticalSection 클래스
CComCriticalSection 클래스
클래스 개요