Partage via


CMultiLock, classe

Représente le mécanisme de contrôle d'accès utilisé pour accéder aux ressources dans un programme multithread.

Syntaxe

class CMultiLock

Membres

Constructeurs publics

Nom Description
CMultiLock ::CMultiLock Construit un objet CMultiLock.

Méthodes publiques

Nom Description
CMultiLock ::IsLocked Détermine si un objet de synchronisation spécifique dans le tableau est verrouillé.
CMultiLock ::Lock Attend le tableau d’objets de synchronisation.
CMultiLock ::Unlock Libère tous les objets de synchronisation détenus.

Notes

CMultiLock n’a pas de classe de base.

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

Pour utiliser un CMultiLock objet, commencez par créer un tableau des objets de synchronisation sur lesquels vous souhaitez attendre. Ensuite, appelez le constructeur de l’objet CMultiLock à l’intérieur d’une fonction membre dans la classe de la ressource contrôlée. Appelez ensuite la fonction de membre Lock pour déterminer si une ressource est disponible (signalée). Si c’est le cas, poursuivez avec le reste de la fonction membre. Si aucune ressource n’est disponible, attendez un délai spécifié pour qu’une ressource soit libérée ou retourne un échec. Une fois l’utilisation d’une ressource terminée, appelez la fonction Déverrouillage si l’objet CMultiLock doit être utilisé à nouveau ou autoriser l’objet CMultiLock à être détruit.

CMultiLock les objets sont les plus utiles lorsqu’un thread a un grand nombre d’objets CEvent auxquels il peut répondre. Créez un tableau contenant tous les CEvent pointeurs et appelez Lock. Cela entraîne l’attente du thread jusqu’à ce que l’un des événements soit signalé.

Pour plus d’informations sur l’utilisation des CMultiLock objets, consultez l’article Multithreading : Utilisation des classes de synchronisation.

Hiérarchie d'héritage

CMultiLock

Spécifications

En-tête : afxmt.h

CMultiLock ::CMultiLock

Construit un objet CMultiLock.

CMultiLock(
    CSyncObject* ppObjects [ ],
    DWORD dwCount,
    BOOL bInitialLock = FALSE);

Paramètres

ppObjects
Tableau de pointeurs vers les objets de synchronisation à attendre. Ne peut pas avoir la valeur NULL.

dwCount
Nombre d’objets dans ppObjects. Doit être supérieure à 0.

bInitialLock
Spécifie s’il faut tenter initialement d’accéder à l’un des objets fournis.

Notes

Cette fonction est appelée après avoir créé le tableau d’objets de synchronisation à attendre. Il est généralement appelé à partir du thread qui doit attendre que l’un des objets de synchronisation devienne disponible.

CMultiLock ::IsLocked

Détermine si l’objet spécifié n’est pas signé (indisponible).

BOOL IsLocked(DWORD dwItem);

Paramètres

dwItem
Index dans le tableau d’objets correspondant à l’objet dont l’état est interrogé.

Valeur de retour

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

CMultiLock ::Lock

Appelez cette fonction pour accéder à une ou plusieurs ressources contrôlées par les objets de synchronisation fournis au CMultiLock constructeur.

DWORD Lock(
    DWORD dwTimeOut = INFINITE,
    BOOL bWaitForAll = TRUE,
    DWORD dwWakeMask = 0);

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.

bWaitForAll
Spécifie si tous les objets attendus doivent être signalés en même temps avant de retourner. Si la valeur est FALSE, Lock retourne quand l’un des objets attendus est signalé.

dwWakeMask
Spécifie d’autres conditions autorisées à abandonner l’attente. Pour obtenir la liste complète des options disponibles pour ce paramètre, consultez MsgWaitForMultipleObjects dans le Kit de développement logiciel (SDK) Windows.

Valeur de retour

En Lock cas d’échec, elle retourne - 1. Si elle réussit, elle retourne l’une des valeurs suivantes :

  • Entre WAIT_OBJECT_0 et WAIT_OBJECT_0 + (nombre d’objets - 1)

    Si bWaitForAll a la valeur TRUE, tous les objets sont signalés (disponibles). Si bWaitForAll a la valeur FALSE, la valeur de retour WAIT_OBJECT_0 est l’index dans le tableau d’objets de l’objet signalé (disponible).

  • WAIT_OBJECT_0 + (nombre d’objets)

    Un événement spécifié dans dwWakeMask est disponible dans la file d’attente d’entrée du thread.

  • Entre WAIT_ABANDONED_0 et WAIT_ABANDONED_0 + (nombre d’objets - 1)

    Si bWaitForAll a la valeur TRUE, tous les objets sont signalés et au moins l’un des objets est un objet mutex abandonné. Si bWaitForAll a la valeur FALSE, la valeur de retour - WAIT_ABANDONED_0 est l’index dans le tableau d’objets de l’objet mutex abandonné qui satisfait l’attente.

  • WAIT_TIMEOUT

    L’intervalle de délai d’expiration spécifié dans dwTimeOut a expiré sans que l’attente réussisse.

Notes

Si bWaitForAll a la valeur TRUE, Lock retourne correctement dès que tous les objets de synchronisation deviennent signalés simultanément. Si bWaitForAll a la valeur FALSE, Lock retourne dès qu’un ou plusieurs objets de synchronisation sont signalés.

Si Lock elle n’est pas en mesure de retourner immédiatement, elle attend pas plus que le nombre de millisecondes spécifiées dans le paramètre dwTimeOut avant de retourner. Si dwTimeOut est INFINITE, Lock ne retourne pas tant que l’accès à un objet n’est pas obtenu ou qu’une condition spécifiée dans dwWakeMask n’a pas été remplie. Sinon, si Lock elle a pu acquérir un objet de synchronisation, elle retourne correctement ; si ce n’est pas le cas, elle retourne un échec.

CMultiLock ::Unlock

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

BOOL Unlock();

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

Paramètres

lCount
Nombre de références à libérer. 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 pour l’objet de synchronisation. Si la valeur EST NULL, le 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 CMultiLockle destructeur de 's.

La première forme de tentatives de Unlock déverrouillage de l’objet de synchronisation géré par CMultiLock. La deuxième forme de tentatives de Unlock déverrouillage des CSemaphore objets détenus par CMultiLock. Si CMultiLock elle ne possède aucun objet verrouillé CSemaphore , la fonction retourne FALSE ; sinon, elle retourne TRUE. lCount et lpPrevCount sont exactement les mêmes que les paramètres de CSingleLock ::Unlock. La deuxième forme est Unlock rarement applicable aux situations multiblocages.

Voir aussi

Graphique hiérarchique