Share via


CSingleLock-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 een resource in een programma met meerderereads.

Syntaxis

class CSingleLock

Leden

Openbare constructors

Naam Description
CSingleLock::CSingleLock Maakt een CSingleLock object.

Openbare methoden

Naam Description
CSingleLock::IsLocked Bepaalt of het object is vergrendeld.
CSingleLock::Lock Wacht op een synchronisatieobject.
CSingleLock::Unlock Geeft een synchronisatieobject vrij.

Opmerkingen

CSingleLock heeft geen basisklasse.

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

Als u een CSingleLock object wilt gebruiken, roept u de constructor aan binnen een lidfunctie in de klasse van de beheerde resource. Roep vervolgens de IsLocked lidfunctie aan om te bepalen of de resource beschikbaar is. Als dat het is, gaat u verder met de rest van de lidfunctie. Als de resource niet beschikbaar is, wacht u totdat de resource is vrijgegeven of retourneert u een fout. Nadat het gebruik van de resource is voltooid, roept u de Unlock functie aan als het CSingleLock object opnieuw moet worden gebruikt of het CSingleLock object mag worden vernietigd.

CSingleLock voor objecten is de aanwezigheid van een object vereist dat is afgeleid van CSyncObject. Dit is meestal een gegevenslid van de klasse van de beheerde resource. Zie het artikel Multithreading: De synchronisatieklassen gebruiken voor meer informatie over het gebruik CSingleLock van objecten.

Overnamehiërarchie

CSingleLock

Requirements

Rubriek:afxmt.h

CSingleLock::CSingleLock

Maakt een CSingleLock object.

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

Parameterwaarden

pObject
Verwijst naar het synchronisatieobject dat moet worden geopend. Kan niet NULL zijn.

bInitialLock
Hiermee geeft u op of u in eerste instantie probeert toegang te krijgen tot het opgegeven object.

Opmerkingen

Deze functie wordt over het algemeen aangeroepen vanuit een toegangslidfunctie van de beheerde resource.

Example

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

Bepaalt of het object dat is gekoppeld aan het CSingleLock object niet-ondertekend is (niet beschikbaar).

BOOL IsLocked();

Retourwaarde

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

Example

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

Roep deze functie aan om toegang te krijgen tot de resource die wordt beheerd door het synchronisatieobject dat aan de CSingleLock constructor is verstrekt.

BOOL Lock(DWORD dwTimeOut = INFINITE);

Parameterwaarden

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

Retourwaarde

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

Opmerkingen

Als het synchronisatieobject wordt gesignaleerd, Lock wordt het geretourneerd en is de thread nu eigenaar van het object. Als het synchronisatieobject niet-ondertekend is (niet beschikbaar), Lock wacht u totdat het synchronisatieobject wordt gesignaleerd tot het aantal milliseconden dat is opgegeven in de dwTimeOut parameter. Als het synchronisatieobject niet is gesignaleerd in de opgegeven tijdsduur, Lock retourneert u een fout.

Example

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

Hiermee wordt het synchronisatieobject vrijgegeven dat eigendom is van CSingleLock.

BOOL Unlock();

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

Parameterwaarden

lCount
Aantal toegangsrechten om vrij te geven. Moet groter zijn dan 0. Als het opgegeven bedrag ervoor zorgt dat het aantal objecten het maximum overschrijdt, wordt het aantal niet gewijzigd en wordt de functie geretourneerd FALSE.

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

Retourwaarde

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

Opmerkingen

Deze functie wordt aangeroepen door CSingleLockdestructor.

Als u meer dan één toegangsaantal van een doofoor wilt vrijgeven, gebruikt u de tweede vorm van Unlock en geeft u het aantal toegangsrechten op dat moet worden vrijgegeven.

Example

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

Zie ook

Hiërarchiegrafiek
CMultiLock klasse