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