Partage via


La classe CSingleLock

Représente le mécanisme de contrôle d'accès utilisé dans le contrôle de l'accès à une ressource dans un programme multithread.

Syntaxe

class CSingleLock

Membres

Constructeurs publics

Nom Description
CSingleLock::CSingleLock Construit un objet CSingleLock.

Méthodes publiques

Nom Description
CSingleLock::IsLocked Détermine si l’objet est verrouillé.
CSingleLock::Lock Attend un objet de synchronisation.
CSingleLock::Unlock Libère un objet de synchronisation.

Notes

CSingleLock n’a pas de classe de base.

Pour utiliser les classes CSemaphorede synchronisation , CMutex, CCriticalSectionet , vous CEventdevez créer un ou CMultiLock un CSingleLock objet pour attendre et libérer l’objet de synchronisation. Utilisez CSingleLock quand vous n’avez besoin d’attendre qu’un seul objet à la fois. Utilisez CMultiLock lorsqu’il existe plusieurs objets que vous pouvez utiliser à un moment donné.

Pour utiliser un CSingleLock objet, appelez son constructeur à l’intérieur d’une fonction membre dans la classe de la ressource contrôlée. Appelez ensuite la IsLocked fonction membre pour déterminer si la ressource est disponible. Si c’est le cas, poursuivez avec le reste de la fonction membre. Si la ressource n’est pas disponible, attendez un délai spécifié pour la libération de la ressource ou l’échec de retour. Une fois que l’utilisation de la ressource est terminée, appelez la Unlock fonction si l’objet CSingleLock doit être réutilisé ou autorisez la destruction de l’objet CSingleLock .

CSingleLock les objets nécessitent la présence d’un objet dérivé de CSyncObject. Il s’agit généralement d’un membre de données de la classe de ressource contrôlée. Pour plus d’informations sur l’utilisation des CSingleLock objets, consultez l’article Multithreading : Utilisation des classes de synchronisation.

Hiérarchie d'héritage

CSingleLock

Spécifications

En-tête : afxmt.h

CSingleLock::CSingleLock

Construit un objet CSingleLock.

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

Paramètres

pObject
Pointe vers l’objet de synchronisation à accéder. Ne peut pas être NULL.

bInitialLock
Spécifie s’il faut tenter initialement d’accéder à l’objet fourni.

Notes

Cette fonction est généralement appelée à partir d’une fonction membre d’accès de la ressource contrôlée.

Exemple

// 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

Détermine si l’objet associé à l’objet CSingleLock n’est pas signé (indisponible).

BOOL IsLocked();

Valeur de retour

Différent de zéro si l’objet est verrouillé ; sinon 0.

Exemple

// 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

Appelez cette fonction pour accéder à la ressource contrôlée par l’objet de synchronisation fourni au CSingleLock constructeur.

BOOL Lock(DWORD dwTimeOut = INFINITE);

Paramètres

dwTimeOut
Spécifie la durée d’attente de l’objet de synchronisation à mettre à disposition (signalé). Si INFINITE, Lock attend que l’objet soit signalé avant de retourner.

Valeur de retour

Différent de zéro si la fonction a réussi ; sinon 0.

Notes

Si l’objet de synchronisation est signalé, Lock retourne correctement et le thread possède désormais l’objet. Si l’objet de synchronisation n’est pas signé (non signé), Lock attend que l’objet de synchronisation devienne signalé jusqu’au nombre de millisecondes spécifiées dans le dwTimeOut paramètre. Si l’objet de synchronisation n’a pas été signalé dans la durée spécifiée, Lock retourne l’échec.

Exemple

// 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

Libère l’objet de synchronisation appartenant à CSingleLock.

BOOL Unlock();

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

Paramètres

lCount
Nombre d’accès à la mise en production. Doit être supérieure à 0. Si la quantité spécifiée entraîne le dépassement du nombre maximal de l’objet, le nombre n’est pas modifié et la fonction retourne FALSE.

lPrevCount
Pointe vers une variable pour recevoir le nombre précédent de l’objet de synchronisation. Si NULLle nombre précédent n’est pas retourné.

Valeur de retour

Différent de zéro si la fonction a réussi ; sinon 0.

Notes

Cette fonction est appelée par CSingleLockle destructeur de 's.

Si vous devez libérer plusieurs nombres d’accès d’un sémaphore, utilisez la deuxième forme et Unlock spécifiez le nombre d’accès à libérer.

Exemple

// 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();
}

Voir aussi

Graphique hiérarchique
CMultiLock Classe