description | title | ms.date | f1_keywords | helpviewer_keywords | ms.assetid | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Learn more about: CComSingleThreadModel Class |
CComSingleThreadModel Class |
2/29/2020 |
|
|
e5dc30c7-405a-4ba4-8ae9-51937243fce8 |
This class provides methods for incrementing and decrementing the value of a variable.
class CComSingleThreadModel
Name | Description |
---|---|
CComSingleThreadModel::AutoCriticalSection | References class CComFakeCriticalSection. |
CComSingleThreadModel::CriticalSection | References class CComFakeCriticalSection . |
CComSingleThreadModel::ThreadModelNoCS | References CComSingleThreadModel . |
Name | Description |
---|---|
CComSingleThreadModel::Decrement | Decrements the value of the specified variable. This implementation is not thread-safe. |
CComSingleThreadModel::Increment | Increments the value of the specified variable. This implementation is not thread-safe. |
CComSingleThreadModel
provides methods for incrementing and decrementing the value of a variable. Unlike CComMultiThreadModel and CComMultiThreadModelNoCS, these methods are not thread-safe.
Typically, you use CComSingleThreadModel
through one of two typedef
names, either CComObjectThreadModel or CComGlobalsThreadModel. The class referenced by each typedef
depends on the threading model used, as shown in the following table:
typedef | Single threading model | Apartment threading model | Free threading model |
---|---|---|---|
CComObjectThreadModel |
S | S | M |
CComGlobalsThreadModel |
S | M | M |
S= CComSingleThreadModel
; M= CComMultiThreadModel
CComSingleThreadModel
itself defines three typedef
names. ThreadModelNoCS
references CComSingleThreadModel
. AutoCriticalSection
and CriticalSection
reference class CComFakeCriticalSection, which provides empty methods associated with obtaining and releasing ownership of a critical section.
Header: atlbase.h
When using CComSingleThreadModel
, the typedef
name AutoCriticalSection
references class CComFakeCriticalSection.
typedef CComFakeCriticalSection AutoCriticalSection;
Because CComFakeCriticalSection
does not provide a critical section, its methods do nothing.
CComMultiThreadModel and CComMultiThreadModelNoCS contain definitions for AutoCriticalSection
. The following table shows the relationship between the threading model class and the critical section class referenced by AutoCriticalSection
:
Class defined in | Class referenced |
---|---|
CComSingleThreadModel |
CComFakeCriticalSection |
CComMultiThreadModel |
CComAutoCriticalSection |
CComMultiThreadModelNoCS |
CComFakeCriticalSection |
In addition to AutoCriticalSection
, you can use the typedef
name CriticalSection. You should not specify AutoCriticalSection
in global objects or static class members if you want to eliminate the CRT startup code.
See CComMultiThreadModel::AutoCriticalSection.
When using CComSingleThreadModel
, the typedef
name CriticalSection
references class CComFakeCriticalSection.
typedef CComFakeCriticalSection CriticalSection;
Because CComFakeCriticalSection
does not provide a critical section, its methods do nothing.
CComMultiThreadModel and CComMultiThreadModelNoCS contain definitions for CriticalSection
. The following table shows the relationship between the threading model class and the critical section class referenced by CriticalSection
:
Class defined in | Class referenced |
---|---|
CComSingleThreadModel |
CComFakeCriticalSection |
CComMultiThreadModel |
CComCriticalSection |
CComMultiThreadModelNoCS |
CComFakeCriticalSection |
In addition to CriticalSection
, you can use the typedef
name AutoCriticalSection. You should not specify AutoCriticalSection
in global objects or static class members if you want to eliminate the CRT startup code.
See CComMultiThreadModel::AutoCriticalSection.
This static function decrements the value of the variable pointed to by p.
static ULONG WINAPI Decrement(LPLONG p) throw();
p
[in] Pointer to the variable to be decremented.
The result of the decrement.
This static function increments the value of the variable pointed to by p.
static ULONG WINAPI Increment(LPLONG p) throw();
p
[in] Pointer to the variable to be incremented.
The result of the increment.
When using CComSingleThreadModel
, the typedef
name ThreadModelNoCS
simply references CComSingleThreadModel
.
typedef CComSingleThreadModel ThreadModelNoCS;
CComMultiThreadModel and CComMultiThreadModelNoCS contain definitions for ThreadModelNoCS
. The following table shows the relationship between the threading model class and the class referenced by ThreadModelNoCS
:
Class defined in | Class referenced |
---|---|
CComSingleThreadModel |
CComSingleThreadModel |
CComMultiThreadModel |
CComMultiThreadModelNoCS |
CComMultiThreadModelNoCS |
CComMultiThreadModelNoCS |