Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of mappen te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen om mappen te wijzigen.
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.