Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
CComMultiThreadModelNoCS fornece métodos thread-safe para incrementar e decrementar o valor de uma variável, sem a funcionalidade crítica de bloqueio ou desbloqueio de seção.
Sintaxe
class CComMultiThreadModelNoCS
Membros
Typedefs públicos
| Nome | Descrição |
|---|---|
| CComMultiThreadModelNoCS::AutoCriticalSection | Classe de referências CComFakeCriticalSection. |
| CComMultiThreadModelNoCS::CriticalSection | Classe de referência CComFakeCriticalSection. |
| CComMultiThreadModelNoCS::ThreadModelNoCS | Classe de referência CComMultiThreadModelNoCS. |
Métodos públicos
| Nome | Descrição |
|---|---|
| CComMultiThreadModelNoCS::Decrement | (Estático) Decrementa o valor da variável especificada de maneira thread-safe. |
| CComMultiThreadModelNoCS::Increment | (Estático) Incrementa o valor da variável especificada de maneira thread-safe. |
Comentários
CComMultiThreadModelNoCS é similar a CComMultiThreadModel no fornecimento de métodos thread-safe para incrementar e decrementar uma variável. No entanto, quando você faz referência a uma classe de seção crítica por meio de CComMultiThreadModelNoCS, métodos como Lock e Unlock não terão efeito.
Normalmente, você usa CComMultiThreadModelNoCS através do ThreadModelNoCS typedef nome. Esse typedef é definido em CComMultiThreadModelNoCS, CComMultiThreadModele CComSingleThreadModel.
Observação
Os nomes globais typedefCComObjectThreadModel e CComGlobalsThreadModel não fazem referência a CComMultiThreadModelNoCS.
Além de ThreadModelNoCS, CComMultiThreadModelNoCS define AutoCriticalSection e CriticalSection. Esses dois últimos nomes typedef fazem referência a CComFakeCriticalSection, que fornece métodos vazios associados à obtenção e liberação de uma seção crítica.
Requisitos
Cabeçalho: atlbase.h
CComMultiThreadModelNoCS::AutoCriticalSection
Ao usar CComMultiThreadModelNoCS, o nome typedef AutoCriticalSection faz referência à classe CComFakeCriticalSection.
typedef CComFakeCriticalSection AutoCriticalSection;
Comentários
Por CComFakeCriticalSection não fornecer uma seção crítica, seus métodos não fazem nada.
CComMultiThreadModel and CComSingleThreadModel também contêm definições para AutoCriticalSection. A seguinte tabela 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 |
|---|---|
CComMultiThreadModelNoCS |
CComFakeCriticalSection |
CComMultiThreadModel |
CComAutoCriticalSection |
CComSingleThreadModel |
CComFakeCriticalSection |
Além de AutoCriticalSection, você pode usar o nome typedef CriticalSection. Você não deverá especificar AutoCriticalSection em objetos globais ou membros de classe estática se quiser eliminar o código de inicialização CRT.
Exemplo
Confira CComMultiThreadModel::AutoCriticalSection.
CComMultiThreadModelNoCS::CriticalSection
Ao usar CComMultiThreadModelNoCS, o nome typedef CriticalSection faz referência à classe CComFakeCriticalSection.
typedef CComFakeCriticalSection CriticalSection;
Comentários
Por CComFakeCriticalSection não fornecer uma seção crítica, seus métodos não fazem nada.
CComMultiThreadModel and CComSingleThreadModel também contêm definições para CriticalSection. A seguinte tabela 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 |
|---|---|
CComMultiThreadModelNoCS |
CComFakeCriticalSection |
CComMultiThreadModel |
CComCriticalSection |
CComSingleThreadModel |
CComFakeCriticalSection |
Além de CriticalSection, você pode usar o AutoCriticalSection do nome typedef. Você não deverá especificar AutoCriticalSection em objetos globais ou membros de classe estática se quiser eliminar o código de inicialização CRT.
Exemplo
Confira CComMultiThreadModel::AutoCriticalSection.
CComMultiThreadModelNoCS::Decrement
Essa função estática chama a função InterlockedDecrement do Win32, que decrementa o valor da variável apontada por p.
static ULONG WINAPI Decrement(LPLONG p) throw();
Parâmetros
p
[entrada] Ponteiro para a variável a ser decrementada.
Valor de retorno
Se o resultado do decremento for 0, Decrement retornará 0. Se o resultado do decremento for diferente de zero, o valor retornado também será diferente de zero, mas poderá não ser igual ao resultado do decremento.
Comentários
InterlockedDecrement impede que mais de um thread use simultaneamente essa variável.
CComMultiThreadModelNoCS::Increment
Essa função estática chama a função InterlockedIncrement do Win32, que incrementa o valor da variável apontada por p.
static ULONG WINAPI Increment(LPLONG p) throw();
Parâmetros
p
[entrada] Ponteiro para a variável a ser incrementada.
Valor de retorno
Se o resultado do incremento for 0, Incremento retornará 0. Se o resultado do incremento for diferente de zero, o valor retornado também será diferente de zero, mas poderá não ser igual ao resultado do incremento.
Comentários
InterlockedIncrement impede que mais de um thread use simultaneamente essa variável.
CComMultiThreadModelNoCS::ThreadModelNoCS
Ao usar CComMultiThreadModelNoCS, o nome typedef ThreadModelNoCS simplesmente faz referência a CComMultiThreadModelNoCS.
typedef CComMultiThreadModelNoCS ThreadModelNoCS;
Comentários
CComMultiThreadModel and CComSingleThreadModel também contêm definições para ThreadModelNoCS. A seguinte tabela mostra a relação entre a classe de modelo de threading e a classe referenciada por ThreadModelNoCS:
| Classe definida em | Classe referenciada |
|---|---|
CComMultiThreadModelNoCS |
CComMultiThreadModelNoCS |
CComMultiThreadModel |
CComMultiThreadModelNoCS |
CComSingleThreadModel |
CComSingleThreadModel |
Observe que a definição de ThreadModelNoCS em CComMultiThreadModelNoCS fornece simetria com CComMultiThreadModel e CComSingleThreadModel. Por exemplo, suponha que o código de exemplo em CComMultiThreadModel::AutoCriticalSection declarou o typedef seguinte:
typedef typename ThreadModel::ThreadModelNoCS _ThreadModel;
Seja qual for a classe especificada para ThreadModel (como CComMultiThreadModelNoCS), _ThreadModel resolve adequadamente.
Exemplo
Confira CComMultiThreadModel::AutoCriticalSection.