Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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, CCriticalSectiona 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 NULLse 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();
}