Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
CComMultiThreadModel fornece métodos thread-safe para incrementar e diminuir o valor de uma variável.
Sintaxe
class CComMultiThreadModel
Membros
Typedefs Públicos
| Designação | Descrição |
|---|---|
| CComMultiThreadModel::AutoCriticalSection | Classe de referências CComAutoCriticalSection. |
| CComMultiThreadModel::CriticalSection | Classe de referências CComCriticalSection. |
| CComMultiThreadModel::ThreadModelNoCS | Classe de referências CComMultiThreadModelNoCS. |
Métodos Públicos
| Designação | Descrição |
|---|---|
| CComMultiThreadModel::D ecrement | (Estática) Decrements o valor da variável especificada de uma maneira thread-safe. |
| CComMultiThreadModel::Increment | (Estática) Incrementa o valor da variável especificada de uma maneira thread-safe. |
Comentários
Normalmente, você usa CComMultiThreadModel através de um dos dois nomes typedef, CComObjectThreadModel ou CComGlobalsThreadModel. A classe referenciada por cada typedef depende do modelo de threading usado, conforme mostrado na tabela a seguir:
| typedef | Rosca única | Threading de apartamento | Roscagem livre |
|---|---|---|---|
CComObjectThreadModel |
S | S | M |
CComGlobalsThreadModel |
S | M | M |
S= CComSingleThreadModel; M= CComMultiThreadModel
CComMultiThreadModel própria define três typedef nomes.
AutoCriticalSection e CriticalSection classes de referência que fornecem métodos para obter e liberar a propriedade de uma seção crítica.
ThreadModelNoCS classe de referências [CComMultiThreadModelNoCS(ccommultithreadmodelnocs-class.md).
Requerimentos
Cabeçalho: atlbase.h
CComMultiThreadModel::AutoCriticalSection
Ao usar CComMultiThreadModel, o nome typedefAutoCriticalSection faz referência à classe CComAutoCriticalSection, que fornece métodos para obter e liberar a propriedade de um objeto de seção crítica.
typedef CComAutoCriticalSection AutoCriticalSection;
Comentários
CComSingleThreadModel e CComMultiThreadModelNoCS também conter definições para AutoCriticalSection. A tabela a seguir mostra a relação entre a classe de modelo de threading e a classe de seção crítica referenciada por AutoCriticalSection:
| Classe definida em | Classe referenciada |
|---|---|
CComMultiThreadModel |
CComCriticalSection |
CComSingleThreadModel |
CComFakeCriticalSection |
CComMultiThreadModelNoCS |
CComFakeCriticalSection |
Além de AutoCriticalSection, você pode usar o nome typedefCriticalSection. Você não deve especificar AutoCriticalSection em objetos globais ou membros de classe estática se quiser eliminar o código de inicialização CRT.
Exemplo
O código a seguir é modelado de acordo com CComObjectRootExe demonstra AutoCriticalSection sendo usado em um ambiente de threading.
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;
As tabelas a seguir mostram os resultados dos métodos InternalAddRef e Lock, dependendo do parâmetro de modelo ThreadModel e do modelo de threading usado pelo aplicativo:
ThreadModel = CComObjectThreadModel
| Método | Threading Individual ou Apartamento | Threading gratuito |
|---|---|---|
InternalAddRef |
O incremento não é thread-safe. | O incremento é thread-safe. |
Lock |
Não faz nada; Não há nenhuma seção crítica para bloquear. | A secção crítica está bloqueada. |
ThreadModel = CComObjectThreadModel::ThreadModelNoCS
| Método | Threading Individual ou Apartamento | Threading gratuito |
|---|---|---|
InternalAddRef |
O incremento não é thread-safe. | O incremento é thread-safe. |
Lock |
Não faz nada; Não há nenhuma seção crítica para bloquear. | Não faz nada; Não há nenhuma seção crítica para bloquear. |
CComMultiThreadModel::CriticalSection
Ao usar CComMultiThreadModel, o nome typedefCriticalSection faz referência à classe CComCriticalSection, que fornece métodos para obter e liberar a propriedade de um objeto de seção crítica.
typedef CComCriticalSection CriticalSection;
Comentários
CComSingleThreadModel e CComMultiThreadModelNoCS também conter definições para CriticalSection. A tabela a seguir mostra a relação entre a classe de modelo de threading e a classe de seção crítica referenciada por CriticalSection:
| Classe definida em | Classe referenciada |
|---|---|
CComMultiThreadModel |
CComCriticalSection |
CComSingleThreadModel |
CComFakeCriticalSection |
CComMultiThreadModelNoCS |
CComFakeCriticalSection |
Além de CriticalSection, você pode usar o nome typedefAutoCriticalSection. Você não deve especificar AutoCriticalSection em objetos globais ou membros de classe estática se quiser eliminar o código de inicialização CRT.
Exemplo
Consulte CComMultiThreadModel::AutoCriticalSection.
CComMultiThreadModel::D ecrement
Esta função estática chama a função Win32 InterlockedDecrement, que diminui o valor da variável apontada por p.
static ULONG WINAPI Decrement(LPLONG p) throw ();
Parâmetros
p
[em] Ponteiro para a variável a ser diminuída.
Valor de retorno
Se o resultado do decréscimo for 0, então Decrement retorna 0. Se o resultado do decréscimo for diferente de zero, o valor de retorno também é diferente de zero, mas pode não ser igual ao resultado do decréscimo.
Comentários
InterlockedDecrement impede que mais de um thread use simultaneamente essa variável.
CComMultiThreadModel::Incremento
Essa função estática chama a função Win32 InterlockedIncrement, que incrementa o valor da variável apontada por p.
static ULONG WINAPI Increment(LPLONG p) throw ();
Parâmetros
p
[em] Ponteiro para a variável a ser incrementada.
Valor de retorno
Se o resultado do incremento for 0, Increment retornará 0. Se o resultado do incremento for diferente de zero, o valor de retorno também será diferente de zero, mas pode não ser igual ao resultado do incremento.
Comentários
InterlockedIncrement impede que mais de um thread use simultaneamente essa variável.
CComMultiThreadModel::ThreadModelNoCS
Ao usar CComMultiThreadModel, o nome typedefThreadModelNoCS a classe de referências CComMultiThreadModelNoCS.
typedef CComMultiThreadModelNoCS ThreadModelNoCS;
Comentários
CComMultiThreadModelNoCS fornece métodos thread-safe para incrementar e diminuir uma variável; no entanto, não fornece uma secção crítica.
CComSingleThreadModel e CComMultiThreadModelNoCS também contêm definições para ThreadModelNoCS. A tabela a seguir mostra a relação entre a classe de modelo de threading e a classe referenciada por ThreadModelNoCS:
| Classe definida em | Classe referenciada |
|---|---|
CComMultiThreadModel |
CComMultiThreadModelNoCS |
CComSingleThreadModel |
CComSingleThreadModel |
CComMultiThreadModelNoCS |
CComMultiThreadModelNoCS |
Exemplo
Consulte CComMultiThreadModel::AutoCriticalSection.
Ver também
CComSingleThreadModel Classe
CComAutoCriticalSection Classe
Classe CComCriticalSection
Visão geral da classe