Поделиться через


Класс CComMultiThreadModelNoCS

CComMultiThreadModelNoCS предоставляет потокобезопасные методы для увеличения и уменьшения значения переменной без критической блокировки разделов или разблокировки функций.

Синтаксис

class CComMultiThreadModelNoCS

Участники

Общедоступные определения типов

Имя Описание
CComMultiThreadModelNoCS::AutoCriticalSection Ссылается на класс CComFakeCriticalSection.
CComMultiThreadModelNoCS::CriticalSection Ссылается на класс CComFakeCriticalSection.
CComMultiThreadModelNoCS::ThreadModelNoCS Ссылается на класс CComMultiThreadModelNoCS.

Открытые методы

Имя Описание
CComMultiThreadModelNoCS::D ecrement (статический) Уменьшает значение указанной переменной в потокобезопасном режиме.
CComMultiThreadModelNoCS::Increment (статический) Увеличивает значение указанной переменной в потокобезопасном режиме.

Замечания

CComMultiThreadModelNoCS аналогичен CComMultiThreadModel , что предоставляет потокобезопасные методы для увеличения и уменьшения переменной. Однако при ссылке на критически важный класс разделов с помощью CComMultiThreadModelNoCSметодов, таких как Lock и Unlock не будет делать ничего.

Как правило, используется CComMultiThreadModelNoCS имя ThreadModelNoCStypedef . Это typedef определяется в CComMultiThreadModelNoCS, CComMultiThreadModelи CComSingleThreadModel.

Примечание.

typedef Глобальные имена CComObjectThreadModel и CComGlobalsThreadModel не ссылалисьCComMultiThreadModelNoCS.

В дополнение к ThreadModelNoCS, CComMultiThreadModelNoCS определяет AutoCriticalSection и CriticalSection. Эти два typedef последних имена ссылались на CComFakeCriticalSection, который предоставляет пустые методы, связанные с получением и освобождением критического раздела.

Требования

Заголовок: atlbase.h

CComMultiThreadModelNoCS::AutoCriticalSection

При использовании CComMultiThreadModelNoCStypedef имя 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

При использовании CComMultiThreadModelNoCStypedef имя 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

При использовании CComMultiThreadModelNoCStypedef имя ThreadModelNoCS просто ссылаетсяCComMultiThreadModelNoCS.

typedef CComMultiThreadModelNoCS ThreadModelNoCS;

Замечания

CComMultiThreadModel и CComSingleThreadModel также содержат определения для ThreadModelNoCS. В следующей таблице показана связь между классом модели потоков и классом, ThreadModelNoCSна который ссылается:

Класс, определенный в Класс, на который ссылается
CComMultiThreadModelNoCS CComMultiThreadModelNoCS
CComMultiThreadModel CComMultiThreadModelNoCS
CComSingleThreadModel CComSingleThreadModel

Обратите внимание, что определение ThreadModelNoCS в CComMultiThreadModelNoCS предоставляет симметрию и CComMultiThreadModelCComSingleThreadModel. Например, предположим, что пример кода объявлен CComMultiThreadModel::AutoCriticalSection следующим typedefобразом:

typedef typename ThreadModel::ThreadModelNoCS _ThreadModel;

Независимо от класса, указанного для ThreadModel (например CComMultiThreadModelNoCS, ), _ThreadModel разрешается соответствующим образом.

Пример

См. раздел CComMultiThreadModel::AutoCriticalSection.

См. также

Общие сведения о классе