Share via


CMultiLock-klasse

Opmerking

De Microsoft Foundation Classes-bibliotheek (MFC) wordt nog steeds ondersteund. We voegen echter geen functies meer toe of werken de documentatie bij.

Vertegenwoordigt het toegangsbeheermechanisme dat wordt gebruikt voor het beheren van de toegang tot resources in een programma met meerdere gelezen gelezen items.

Syntaxis

class CMultiLock

Leden

Openbare constructors

Naam Description
CMultiLock::CMultiLock Maakt een CMultiLock object.

Openbare methoden

Naam Description
CMultiLock::IsLocked Bepaalt of een specifiek synchronisatieobject in de matrix is vergrendeld.
CMultiLock::Lock Wacht op de matrix met synchronisatieobjecten.
CMultiLock::Ontgrendelen Releases van alle synchronisatieobjecten in eigendom.

Opmerkingen

CMultiLock heeft geen basisklasse.

Als u de synchronisatieklassen CSemaphore, CMutex en CEvent wilt gebruiken, kunt u een CMultiLock of CSingleLock-object maken om te wachten en het synchronisatieobject vrij te geven. Gebruik CMultiLock deze functie wanneer er meerdere objecten zijn die u op een bepaald moment kunt gebruiken. Gebruik CSingleLock deze optie als u slechts één object tegelijk hoeft te wachten.

Als u een CMultiLock object wilt gebruiken, maakt u eerst een matrix van de synchronisatieobjecten waarop u wilt wachten. Roep vervolgens de constructor van het CMultiLock object aan binnen een lidfunctie in de klasse van de beheerde resource. Roep vervolgens de functie Lid vergrendelen aan om te bepalen of een resource beschikbaar is (gesignaleerd). Als dat zo is, gaat u verder met de rest van de lidfunctie. Als er geen resource beschikbaar is, wacht u totdat een resource is vrijgegeven of retourneert u een fout. Nadat het gebruik van een resource is voltooid, roept u de functie Ontgrendelen aan als het CMultiLock object opnieuw moet worden gebruikt of het CMultiLock object mag worden vernietigd.

CMultiLock objecten zijn het handigst wanneer een thread een groot aantal CEvent objecten heeft waarop deze kan reageren. Maak een matrix met alle CEvent aanwijzers en roep aan Lock. Dit zorgt ervoor dat de thread wacht tot een van de gebeurtenissen wordt gesignaleerd.

Zie het artikel Multithreading: De synchronisatieklassen gebruiken voor meer informatie over het gebruik CMultiLock van objecten.

Overnamehiërarchie

CMultiLock

Requirements

Koptekst: afxmt.h

CMultiLock::CMultiLock

Maakt een CMultiLock object.

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

Parameterwaarden

ppObjects
Matrix van aanwijzers naar de synchronisatieobjecten waarop moet worden gewacht. Kan niet NULL zijn.

dwCount
Aantal objecten in ppObjects. Moet groter zijn dan 0.

bInitialLock
Hiermee geeft u op of u in eerste instantie toegang wilt krijgen tot een van de opgegeven objecten.

Opmerkingen

Deze functie wordt aangeroepen nadat u de matrix met synchronisatieobjecten hebt gemaakt waarop moet worden gewacht. Het wordt meestal aangeroepen vanuit de thread die moet wachten tot een van de synchronisatieobjecten beschikbaar is.

CMultiLock::IsLocked

Bepaalt of het opgegeven object niet-ondertekend is (niet beschikbaar).

BOOL IsLocked(DWORD dwItem);

Parameterwaarden

dwItem
De index in de matrix met objecten die overeenkomen met het object waarvan de status wordt opgevraagd.

Retourwaarde

Niet-nul als het opgegeven object is vergrendeld; anders 0.

CMultiLock::Lock

Roep deze functie aan om toegang te krijgen tot een of meer van de resources die worden beheerd door de synchronisatieobjecten die aan de CMultiLock constructor worden geleverd.

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

Parameterwaarden

dwTimeOut
Hiermee geeft u de hoeveelheid tijd die moet worden gewacht totdat het synchronisatieobject beschikbaar is (gesignaleerd). Als ONEINDIG, Lock wacht u totdat het object wordt gesignaleerd voordat het wordt geretourneerd.

bWaitForAll
Hiermee geeft u op of alle objecten waarop wordt gewacht, op hetzelfde moment moeten worden gesignaleerd voordat ze worden geretourneerd. Als ONWAAR wordt geretourneerd Lock wanneer een van de objecten waarop is gewacht, wordt gesignaleerd.

dwWakeMask
Hiermee geeft u andere voorwaarden op die de wachttijd mogen afbreken. Zie MsgWaitForMultipleObjects in de Windows SDK voor een volledige lijst met de beschikbare opties voor deze parameter.

Retourwaarde

Als Lock dit mislukt, wordt - 1 geretourneerd. Als dit lukt, wordt een van de volgende waarden geretourneerd:

  • Tussen WAIT_OBJECT_0 en WAIT_OBJECT_0 + (aantal objecten - 1)

    Als bWaitForAll TRUE is, worden alle objecten gesignaleerd (beschikbaar). Als bWaitForAll ONWAAR is, is de retourwaarde - WAIT_OBJECT_0 de index in de matrix met objecten van het object dat wordt gesignaleerd (beschikbaar).

  • WAIT_OBJECT_0 + (aantal objecten)

    Een gebeurtenis die is opgegeven in dwWakeMask is beschikbaar in de invoerwachtrij van de thread.

  • Tussen WAIT_ABANDONED_0 en WAIT_ABANDONED_0 + (aantal objecten - 1)

    Als bWaitForAll TRUE is, worden alle objecten gesignaleerd en is ten minste één van de objecten een verlaten mutex-object. Als bWaitForAll ONWAAR is, is de retourwaarde - WAIT_ABANDONED_0 de index in de matrix met objecten van het verlaten mutex-object dat aan de wachttijd heeft voldaan.

  • WAIT_TIMEOUT

    Het time-outinterval dat is opgegeven in dwTimeOut is verlopen zonder dat het wachten is geslaagd.

Opmerkingen

Als bWaitForAll TRUE is, Lock wordt deze geretourneerd zodra alle synchronisatieobjecten tegelijkertijd worden gesignaleerd. Als bWaitForAll ONWAAR is, Lock wordt deze geretourneerd zodra een of meer van de synchronisatieobjecten worden gesignaleerd.

Als Lock het niet onmiddellijk kan worden geretourneerd, wacht deze niet meer dan het aantal milliseconden dat is opgegeven in de dwTimeOut-parameter voordat deze wordt geretourneerd. Als dwTimeOut ONEINDIG is, Lock wordt deze pas geretourneerd als de toegang tot een object is verkregen of als aan een voorwaarde is voldaan die is opgegeven in dwWakeMask . Lock Als u anders een synchronisatieobject kon verkrijgen, wordt het geretourneerd. Als dat niet het probleem is, wordt er een fout geretourneerd.

CMultiLock::Ontgrendelen

Hiermee wordt het synchronisatieobject vrijgegeven dat eigendom is van CMultiLock.

BOOL Unlock();

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

Parameterwaarden

lCount
Aantal referentieaantallen dat moet worden uitgebracht. Moet groter zijn dan 0. Als de opgegeven hoeveelheid ervoor zorgt dat het aantal objecten het maximum overschrijdt, wordt het aantal niet gewijzigd en retourneert de functie FALSE.

lPrevCount
Verwijst naar een variabele om het vorige aantal voor het synchronisatieobject te ontvangen. Als NULL is, wordt het vorige aantal niet geretourneerd.

Retourwaarde

Niet-nul als de functie is geslaagd; anders 0.

Opmerkingen

Deze functie wordt aangeroepen door CMultiLockdestructor.

De eerste vorm van Unlock pogingen om het synchronisatieobject te ontgrendelen dat wordt beheerd door CMultiLock. De tweede vorm van pogingen om de CSemaphore objecten te ontgrendelen die eigendom zijn CMultiLockvan Unlock . Als er geen vergrendeld CSemaphore object is, retourneert de functie ONWAAR. Anders CMultiLock retourneert deze WAAR. lCount en lpPrevCount zijn precies hetzelfde als de parameters van CSingleLock::Unlock. De tweede vorm is Unlock zelden van toepassing op situaties met meerdere vergrendelingen.

Zie ook

Hiërarchiegrafiek