Sdílet prostřednictvím


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

Viz také

Graf hierarchie
CMultiLock Třída