Partilhar via


CSingleLock Classe

Observação

A biblioteca Microsoft Foundation Classes (MFC) continua a ser suportada. No entanto, já não estamos a adicionar funcionalidades nem a atualizar a documentação.

Representa o mecanismo de controlo de acesso usado no controlo do acesso a um recurso num programa multithread.

Sintaxe

class CSingleLock

Membros

Construtores Públicos

Nome Description
CSingleLock::CSingleLock Constrói um CSingleLock objeto.

Métodos Públicos

Nome Description
CSingleLock::IsLocked Determina se o objeto está bloqueado.
CSingleLock::Lock Fica à espera de um objeto de sincronização.
CSingleLock::Unlock Liberta um objeto de sincronização.

Observações

CSingleLock não tem uma classe base.

Para usar as classes CSemaphorede sincronização , CMutex, CCriticalSection, e CEvent, deve criar um CSingleLock objeto ou CMultiLock para esperar e libertar o objeto de sincronização. Usa CSingleLock quando só precisas de esperar por um objeto de cada vez. Use CMultiLock quando houver vários objetos que possa usar ao mesmo tempo.

Para usar um CSingleLock objeto, chama o seu construtor dentro de uma função membro na classe do recurso controlado. Depois chama a IsLocked função membro para determinar se o recurso está disponível. Se for, continue com o restante da função de membro. Se o recurso não estiver disponível, espere um tempo especificado para que o recurso seja libertado, ou devolve a falha. Após a utilização do recurso estar concluída, pode chamar a Unlock função se o CSingleLock objeto for usado novamente, ou permitir que o CSingleLock objeto seja destruído.

CSingleLock Os objetos requerem a presença de um objeto derivado de CSyncObject. Este é geralmente um membro de dados da classe do recurso controlado. Para mais informações sobre como usar CSingleLock objetos, consulte o artigo Multithreading: Como Usar as Classes de Sincronização.

Hierarquia de herança

CSingleLock

Requerimentos

Cabeçalho:afxmt.h

CSingleLock::CSingleLock

Constrói um CSingleLock objeto.

explicit CSingleLock(
    CSyncObject* pObject,
    BOOL bInitialLock = FALSE);

Parâmetros

pObject
Aponta para o objeto de sincronização a ser acedido. Não pode ser NULL.

bInitialLock
Especifica se deve tentar inicialmente aceder ao objeto fornecido.

Observações

Esta função é geralmente chamada a partir de uma função membro de acesso do recurso controlado.

Example

// m_CritSection is a data member (of type CCriticalSection)
// of an existing class that implements the resource being shared.

// Relate the synchronization object (m_CritSection) with
// our CSingleLock object. 
CSingleLock singleLock(&m_CritSection);
singleLock.Lock();  // Attempt to lock the shared resource
if (singleLock.IsLocked())  // Resource has been locked
{
   //...use the shared resource...

   // Now that we are finished, 
   // unlock the resource for others.
   singleLock.Unlock();
}

CSingleLock::IsLocked

Determina se o objeto associado CSingleLock ao objeto não está sinalizado (indisponível).

BOOL IsLocked();

Valor de retorno

Não nulo se o objeto estiver bloqueado; caso contrário, 0.

Example

// m_Mutex is a data member (of type CMutex)
// of an existing class that implements the resource being shared.

// Relate the synchronization object (m_Mutex) with
// our CSingleLock object. 
CSingleLock singleLock(&m_Mutex);

// Attempt to lock the shared resource
singleLock.Lock(100);    // Wait 100 ms...

// Has the resource been successfully locked?
if (singleLock.IsLocked())
{
   // We were able to lock the resource;
   // we may now work with the data associated with the mutex...

   // Now that we are finished, unlock the resource for others.
   singleLock.Unlock();
}

CSingleLock::Lock

Chame esta função para aceder ao recurso controlado pelo objeto de sincronização fornecido ao CSingleLock construtor.

BOOL Lock(DWORD dwTimeOut = INFINITE);

Parâmetros

dwTimeOut
Especifica o tempo de espera para que o objeto de sincronização esteja disponível (sinalizado). Se INFINITE, Lock esperará até que o objeto seja sinalizado antes de regressar.

Valor de retorno

Não nula se a função fosse bem-sucedida; caso contrário, 0.

Observações

Se o objeto de sincronização for sinalizado, Lock retornará com sucesso e a thread passará a ser dona do objeto. Se o objeto de sincronização não estiver sinalizado (indisponível), Lock aguardará que o objeto de sincronização seja sinalizado até ao número de milissegundos especificados no dwTimeOut parâmetro. Se o objeto de sincronização não foi sinalizado no tempo especificado, retorna Lock falha.

Example

// m_Mutex is a data member (of type CMutex)
// of an existing class that implements the resource being shared.

// Relate the synchronization object (m_Mutex) with
// our CSingleLock object. 
CSingleLock singleLock(&m_Mutex);

// Attempt to lock the shared resource
if (singleLock.Lock(100))    // Wait 100 ms...
{
   // We were able to lock the resource;
   // we may now work with the data associated with the mutex...

   // Now that we are finished, unlock the resource for others.
   singleLock.Unlock();
}

CSingleLock::Unlock

Liberta o objeto de sincronização pertencente a CSingleLock.

BOOL Unlock();

BOOL Unlock(
    LONG lCount,
    LPLONG lPrevCount = NULL);

Parâmetros

lCount
Número de acessos para lançar. Deve ser maior que 0. Se a quantidade especificada fizer com que a contagem do objeto excedesse o seu máximo, a contagem não é alterada e a função devolve FALSE.

lPrevCount
Aponta para uma variável que recebe a contagem anterior do objeto de sincronização. Se NULL, a contagem anterior não for devolvida.

Valor de retorno

Não nula se a função fosse bem-sucedida; caso contrário, 0.

Observações

Esta função é chamada por CSingleLock's destruidor.

Se precisares de libertar mais do que uma contagem de acesso de um semáforo, usa a segunda forma de Unlock e especifica o número de acessos a libertar.

Example

// m_Mutex is a data member (of type CMutex)
// of an existing class that implements the resource being shared.

// Relate the synchronization object (m_Mutex) with
// our CSingleLock object. 
CSingleLock singleLock(&m_Mutex);

// Attempt to lock the shared resource
if (singleLock.Lock(100))    // Wait 100 ms...
{
   // We were able to lock the resource;
   // we may now work with the data associated with the mutex...

   // Now that we are finished, unlock the resource for others.
   singleLock.Unlock();
}

Consulte também

Gráfico de Hierarquia
CMultiLock Classe