Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Een object van klasse CSemaphore vertegenwoordigt een 'semaphore'. Een semaphore is een synchronisatieobject dat de toegang tot gedeelde resources beheert en racevoorwaarden voorkomt.
Syntaxis
class CSemaphore : public CSyncObject
Leden
Openbare constructors
| Naam | Beschrijving |
|---|---|
CSemaphore::CSemaphore |
Maakt een CSemaphore-object. |
Opmerkingen
Semaphores zijn handig bij het beheren van de toegang tot een gedeelde resource die slechts een beperkt aantal gebruikers kan ondersteunen. Het huidige aantal van het CSemaphore object is het aantal toegestane andere gebruikers. Wanneer het aantal nul bereikt, worden alle pogingen om de resource te gebruiken die door het CSemaphore object wordt beheerd, ingevoegd in een systeemwachtrij en wachten totdat er een time-out optreedt of het aantal hoger is dan 0. Het maximum aantal gebruikers dat tegelijkertijd toegang heeft tot de beheerde resource, wordt opgegeven tijdens de bouw van het CSemaphore object.
Als u een CSemaphore object wilt gebruiken, maakt u het CSemaphore object wanneer dit nodig is. Geef de naam op van deemafore waarop u wilt wachten en dat uw toepassing in eerste instantie eigenaar moet zijn van de toepassing. U kunt vervolgens toegang krijgen tot deemafore wanneer de constructor terugkeert. Aanroepen CSyncObject::Unlock wanneer u klaar bent met het openen van de beheerde resource.
Een alternatieve methode voor het gebruik CSemaphore van objecten is het toevoegen van een variabele van het type CSemaphore als gegevenslid aan de klasse die u wilt beheren. Roep tijdens de bouw van het gecontroleerde object de constructor van het CSemaphore gegevenslid aan die het aanvankelijke toegangsaantal, het maximum aantal toegang, de naam van deemafore (als deze wordt gebruikt binnen procesgrenzen) en de gewenste beveiligingskenmerken.
Als u op deze manier toegang wilt krijgen tot resources die op deze manier worden beheerd door CSemaphore objecten, maakt u eerst een variabele van het type CSingleLock of typt u CMultiLock in de toegangslidfunctie van uw resource. Roep vervolgens de lidfunctie van het vergrendelingsobject Lock aan (bijvoorbeeld CSingleLock::Lock). Op dit moment krijgt uw thread toegang tot de resource, wacht u tot de resource is vrijgegeven en krijgt u toegang, of wacht u tot de resource is vrijgegeven en een time-out optreedt en geen toegang tot de resource krijgt. In elk geval wordt uw resource geopend op een thread-veilige manier. Als u de resource wilt vrijgeven, gebruikt u de lidfunctie van het vergrendelingsobject Unlock (bijvoorbeeld CSingleLock::Unlock) of staat u toe dat het vergrendelingsobject buiten het bereik valt.
U kunt ook een CSemaphore afzonderlijk object maken en dit expliciet openen voordat u toegang probeert te krijgen tot de beheerde resource. Deze methode is duidelijker voor iemand die uw broncode leest, gevoeliger voor fouten.
Zie het artikel CSemaphore voor meer informatie over het gebruik van objecten.
Overnamehiƫrarchie
CSemaphore
Behoeften
Koptekst: afxmt.h
CSemaphore::CSemaphore
Maakt een benoemd of niet-benoemd CSemaphore object.
CSemaphore(
LONG lInitialCount = 1,
LONG lMaxCount = 1,
LPCTSTR pstrName = NULL,
LPSECURITY_ATTRIBUTES lpsaAttributes = NULL);
Parameterwaarden
lInitialCount
Het aanvankelijke gebruiksaantal voor de semafore. Moet groter dan of gelijk zijn aan 0 en kleiner dan of gelijk aan lMaxCount.
lMaxCount
Het maximale gebruiksaantal voor de semaphore. Moet groter zijn dan 0.
pstrName
De naam van deemafore. Moet worden opgegeven als de semafore wordt geopend over procesgrenzen. Als NULL, wordt het object niet benoemd. Als de naam overeenkomt met een bestaande semaphore, bouwt de constructor een nieuw CSemaphore object dat verwijst naar de semaphore van die naam. Als de naam overeenkomt met een bestaand synchronisatieobject dat geen semafore is, mislukt de constructie.
lpsaAttributes
Beveiligingskenmerken voor het object semaphore. Zie SECURITY_ATTRIBUTES in de Windows SDK voor een volledige beschrijving van deze structuur.
Opmerkingen
Als u een CSemaphore object wilt openen of vrijgeven, maakt u een CMultiLock of CSingleLock object en roept u de Lock functies en ontgrendelen van leden aan.
Belangrijk
Nadat u het CSemaphore object hebt gemaakt, moet GetLastError u ervoor zorgen dat de mutex nog niet bestaat. Als de mutex onverwacht bestond, kan dit erop wijzen dat een rogue proces squatting is en mogelijk van plan is om de mutex kwaadwillend te gebruiken. In dit geval is de aanbevolen beveiligingsbewuste procedure om de ingang te sluiten en door te gaan alsof er een fout is opgetreden bij het maken van het object.