Класс CComMultiThreadModelNoCS
CComMultiThreadModelNoCS
предоставляет потокобезопасные методы для увеличения и уменьшения значения переменной без критической блокировки разделов или разблокировки функций.
Синтаксис
class CComMultiThreadModelNoCS
Участники
Общедоступные определения типов
Имя | Описание |
---|---|
CComMultiThreadModelNoCS::AutoCriticalSection | Ссылается на класс CComFakeCriticalSection. |
CComMultiThreadModelNoCS::CriticalSection | Ссылается на класс CComFakeCriticalSection . |
CComMultiThreadModelNoCS::ThreadModelNoCS | Ссылается на класс CComMultiThreadModelNoCS . |
Открытые методы
Имя | Описание |
---|---|
CComMultiThreadModelNoCS::D ecrement | (статический) Уменьшает значение указанной переменной в потокобезопасном режиме. |
CComMultiThreadModelNoCS::Increment | (статический) Увеличивает значение указанной переменной в потокобезопасном режиме. |
Замечания
CComMultiThreadModelNoCS
аналогичен CComMultiThreadModel , что предоставляет потокобезопасные методы для увеличения и уменьшения переменной. Однако при ссылке на критически важный класс разделов с помощью CComMultiThreadModelNoCS
методов, таких как Lock
и Unlock
не будет делать ничего.
Как правило, используется CComMultiThreadModelNoCS
имя ThreadModelNoCS
typedef
. Это typedef
определяется в CComMultiThreadModelNoCS
, CComMultiThreadModel
и CComSingleThreadModel.
Примечание.
typedef
Глобальные имена CComObjectThreadModel и CComGlobalsThreadModel не ссылалисьCComMultiThreadModelNoCS
.
В дополнение к ThreadModelNoCS
, CComMultiThreadModelNoCS
определяет AutoCriticalSection
и CriticalSection
. Эти два typedef
последних имена ссылались на CComFakeCriticalSection, который предоставляет пустые методы, связанные с получением и освобождением критического раздела.
Требования
Заголовок: atlbase.h
CComMultiThreadModelNoCS::AutoCriticalSection
При использовании CComMultiThreadModelNoCS
typedef
имя AutoCriticalSection
ссылается на класс CComFakeCriticalSection.
typedef CComFakeCriticalSection AutoCriticalSection;
Замечания
Так как CComFakeCriticalSection
не предоставляет критически важный раздел, его методы ничего не делают.
CComMultiThreadModel и CComSingleThreadModel также содержат определения для AutoCriticalSection
. В следующей таблице показана связь между классом модели потоков и критическим классом разделов, AutoCriticalSection
на который ссылается:
Класс, определенный в | Класс, на который ссылается |
---|---|
CComMultiThreadModelNoCS |
CComFakeCriticalSection |
CComMultiThreadModel |
CComAutoCriticalSection |
CComSingleThreadModel |
CComFakeCriticalSection |
Кроме того AutoCriticalSection
, можно использовать typedef
имя CriticalSection. Если вы хотите исключить код запуска CRT, не следует указывать AutoCriticalSection
в глобальных объектах или статических элементах класса.
Пример
См. раздел CComMultiThreadModel::AutoCriticalSection.
CComMultiThreadModelNoCS::CriticalSection
При использовании CComMultiThreadModelNoCS
typedef
имя CriticalSection
ссылается на класс CComFakeCriticalSection.
typedef CComFakeCriticalSection CriticalSection;
Замечания
Так как CComFakeCriticalSection
не предоставляет критически важный раздел, его методы ничего не делают.
CComMultiThreadModel и CComSingleThreadModel также содержат определения для CriticalSection
. В следующей таблице показана связь между классом модели потоков и критическим классом разделов, CriticalSection
на который ссылается:
Класс, определенный в | Класс, на который ссылается |
---|---|
CComMultiThreadModelNoCS |
CComFakeCriticalSection |
CComMultiThreadModel |
CComCriticalSection |
CComSingleThreadModel |
CComFakeCriticalSection |
Кроме того CriticalSection
, можно использовать typedef
имя AutoCriticalSection
. Если вы хотите исключить код запуска CRT, не следует указывать AutoCriticalSection
в глобальных объектах или статических элементах класса.
Пример
См. раздел CComMultiThreadModel::AutoCriticalSection.
CComMultiThreadModelNoCS::D ecrement
Эта статтическая функция вызывает функцию Win32 InterlockedDecrement, которая уменьшает значение переменной, на которую указывает p.
static ULONG WINAPI Decrement(LPLONG p) throw();
Параметры
p
[in] Указатель на переменную для уменьшения.
Возвращаемое значение
Если результат уменьшения равен 0, Decrement
возвращается значение 0. Если результат декремента ненулевой, возвращаемое значение также ненулевое, но может не совпадать с результатом декремента.
Замечания
InterlockedDecrement предотвращает одновременно использование этой переменной нескольких потоков.
CComMultiThreadModelNoCS::Increment
Эта статтическая функция вызывает функцию Win32 InterlockedIncrement, которая увеличивает значение переменной, на которую указывает p.
static ULONG WINAPI Increment(LPLONG p) throw();
Параметры
p
[in] Указатель на переменную для увеличения.
Возвращаемое значение
Если результат добавочного шага равен 0, то приращение возвращает значение 0. Если результат увеличения ненулевого значения, возвращаемое значение также ненулевое, но может не совпадать с результатом увеличения.
Замечания
InterlockedIncrement предотвращает одновременное использование этой переменной нескольких потоков.
CComMultiThreadModelNoCS::ThreadModelNoCS
При использовании CComMultiThreadModelNoCS
typedef
имя ThreadModelNoCS
просто ссылаетсяCComMultiThreadModelNoCS
.
typedef CComMultiThreadModelNoCS ThreadModelNoCS;
Замечания
CComMultiThreadModel и CComSingleThreadModel также содержат определения для ThreadModelNoCS
. В следующей таблице показана связь между классом модели потоков и классом, ThreadModelNoCS
на который ссылается:
Класс, определенный в | Класс, на который ссылается |
---|---|
CComMultiThreadModelNoCS |
CComMultiThreadModelNoCS |
CComMultiThreadModel |
CComMultiThreadModelNoCS |
CComSingleThreadModel |
CComSingleThreadModel |
Обратите внимание, что определение ThreadModelNoCS
в CComMultiThreadModelNoCS
предоставляет симметрию и CComMultiThreadModel
CComSingleThreadModel
. Например, предположим, что пример кода объявлен CComMultiThreadModel::AutoCriticalSection
следующим typedef
образом:
typedef typename ThreadModel::ThreadModelNoCS _ThreadModel;
Независимо от класса, указанного для ThreadModel
(например CComMultiThreadModelNoCS
, ), _ThreadModel
разрешается соответствующим образом.
Пример
См. раздел CComMultiThreadModel::AutoCriticalSection.