CSingleLock
Třída
Představuje mechanismus řízení přístupu používaný při řízení přístupu k prostředku v multithreaded programu.
Syntaxe
class CSingleLock
Členové
Veřejné konstruktory
Název | Popis |
---|---|
CSingleLock::CSingleLock |
CSingleLock Vytvoří objekt. |
Veřejné metody
Název | Popis |
---|---|
CSingleLock::IsLocked |
Určuje, zda je objekt uzamčen. |
CSingleLock::Lock |
Čeká na objekt synchronizace. |
CSingleLock::Unlock |
Uvolní synchronizační objekt. |
Poznámky
CSingleLock
nemá základní třídu.
Chcete-li použít synchronizační třídy CSemaphore
, CMutex
, CCriticalSection
a CEvent
, musíte vytvořit buď objekt CSingleLock
nebo CMultiLock
objekt čekat na a uvolnit synchronizační objekt. Použijte CSingleLock
, když potřebujete čekat jenom na jeden objekt najednou. Použijte CMultiLock
, když existuje více objektů, které můžete použít v určitém okamžiku.
Chcete-li použít CSingleLock
objekt, zavolejte jeho konstruktor uvnitř členské funkce v řízené třídě prostředku. Potom zavolejte IsLocked
členovu funkci, abyste zjistili, jestli je prostředek dostupný. Pokud ano, pokračujte zbývající částí členské funkce. Pokud prostředek není k dispozici, počkejte buď na určitou dobu, než se prostředek uvolní, nebo se vrátí chyba. Po dokončení použití prostředku buď zavolejte Unlock
funkci, pokud CSingleLock
se má objekt znovu použít, nebo povolte zničení objektu CSingleLock
.
CSingleLock
objekty vyžadují přítomnost objektu odvozeného z CSyncObject
. Obvykle se jedná o datový člen třídy řízeného prostředku. Další informace o tom, jak používat CSingleLock
objekty, naleznete v článku Multithreading: Jak používat synchronizační třídy.
Hierarchie dědičnosti
CSingleLock
Požadavky
Záhlaví: afxmt.h
CSingleLock::CSingleLock
CSingleLock
Vytvoří objekt.
explicit CSingleLock(
CSyncObject* pObject,
BOOL bInitialLock = FALSE);
Parametry
pObject
Odkazuje na objekt synchronizace, ke který se má přistupovat. Nemůžu být NULL
.
bInitialLock
Určuje, zda se má nejprve pokusit o přístup k zadanému objektu.
Poznámky
Tato funkce se obvykle volá z přístupové členské funkce řízeného prostředku.
Příklad
// 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
Určuje, zda objekt přidružený k objektu CSingleLock
není přiřazený (není k dispozici).
BOOL IsLocked();
Návratová hodnota
Nenulové, pokud je objekt uzamčen; jinak 0.
Příklad
// 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
Voláním této funkce získáte přístup k prostředku řízenému objektem synchronizace dodanému konstruktoru CSingleLock
.
BOOL Lock(DWORD dwTimeOut = INFINITE);
Parametry
dwTimeOut
Určuje dobu čekání na dostupnost objektu synchronizace (signalováno). Pokud INFINITE
, Lock
bude čekat, dokud objekt nebude signalován před vrácením.
Návratová hodnota
Nenulové, pokud byla funkce úspěšná; jinak 0.
Poznámky
Pokud je objekt synchronizace signalován, Lock
vrátí se úspěšně a vlákno nyní vlastní objekt. Pokud je synchronizační objekt bez znaménka (nedostupný), bude čekat, Lock
až se objekt synchronizace signalizuje až do počtu milisekund zadaných v parametru dwTimeOut
. Pokud se objekt synchronizace v zadaném čase nezoznačil, Lock
vrátí chybu.
Příklad
// 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
Uvolní synchronizační objekt vlastněný CSingleLock
.
BOOL Unlock();
BOOL Unlock(
LONG lCount,
LPLONG lPrevCount = NULL);
Parametry
lCount
Počet přístupů k vydání Musí být větší než 0. Pokud zadané množství způsobí, že počet objektu překročí jeho maximum, počet se nezmění a funkce vrátí FALSE
.
lPrevCount
Odkazuje na proměnnou pro příjem předchozího počtu objektu synchronizace. Pokud NULL
se předchozí počet nevrátí.
Návratová hodnota
Nenulové, pokud byla funkce úspěšná; jinak 0.
Poznámky
Tato funkce je volána destruktorem CSingleLock
.
Pokud potřebujete uvolnit více než jeden počet přístupů semaforu, použijte druhý tvar Unlock
a zadejte počet přístupů k vydání.
Příklad
// 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();
}