Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
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
Общие сведения о классе