Megosztás a következőn keresztül:


CSingleLock osztály

Megjegyzés:

A Microsoft Foundation Classes (MFC) könyvtár továbbra is támogatott. A továbbiakban azonban nem adunk hozzá funkciókat, és nem frissítjük a dokumentációt.

A többszálú programokban lévő erőforrásokhoz való hozzáférés szabályozásához használt hozzáférés-vezérlési mechanizmust jelöli.

Szemantika

class CSingleLock

Tagok

Nyilvános konstruktorok

Név Description
CSingleLock::CSingleLock Egy CSingleLock objektumot hoz létre.

Nyilvános metódusok

Név Description
CSingleLock::IsLocked Meghatározza, hogy az objektum zárolva van-e.
CSingleLock::Lock Várakozás egy szinkronizálási objektumon.
CSingleLock::Unlock Egy szinkronizálási objektumot ad ki.

Megjegyzések

CSingleLock nincs alaposztálya.

A szinkronizálási osztályok CSemaphoreCMutexCEventCCriticalSectionhasználatához létre kell hoznia egy vagy CMultiLock egy CSingleLock objektumot a szinkronizálási objektum várakozásához és felszabadításához. Akkor használható CSingleLock , ha egyszerre csak egy objektumra kell várnia. Akkor használható CMultiLock , ha egy adott időpontban több objektumot is használhat.

Objektum használatához CSingleLock hívja meg annak konstruktorát egy tagfüggvényen belül az ellenőrzött erőforrás osztályában. Ezután hívja meg a IsLocked tagfüggvényt annak megállapításához, hogy az erőforrás elérhető-e. Ha igen, folytassa a tagfüggvény fennmaradó részével. Ha az erőforrás nem érhető el, várjon egy megadott ideig az erőforrás kiadására, vagy adja vissza a hibát. Az erőforrás használata után hívja meg a Unlock függvényt, ha az CSingleLock objektumot ismét használni szeretné, vagy engedélyezze az CSingleLock objektum megsemmisítését.

CSingleLock az objektumokhoz szükség van egy, a forrásból származtatott objektum jelenlétére CSyncObject. Ez általában az ellenőrzött erőforrás osztályának adattagja. Az objektumok használatáról CSingleLock további információt a Többszálúság: A szinkronizálási osztályok használata című cikkben talál.

Öröklési hierarchia

CSingleLock

Requirements

Fejléc:afxmt.h

CSingleLock::CSingleLock

Egy CSingleLock objektumot hoz létre.

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

Paraméterek

pObject
A elérni kívánt szinkronizálási objektumra mutat. Nem lehet NULL.

bInitialLock
Megadja, hogy először megkísérli-e elérni a megadott objektumot.

Megjegyzések

Ezt a függvényt általában az ellenőrzött erőforrás hozzáférési tagfüggvényéből hívjuk meg.

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

Meghatározza, hogy az objektumhoz CSingleLock társított objektum nincs-e aláírva (nem érhető el).

BOOL IsLocked();

Visszaadott érték

Nonzero, ha az objektum zárolva van; egyéb esetben 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

Hívja meg ezt a függvényt, hogy hozzáférjen a konstruktorhoz megadott szinkronizálási objektum által szabályozott erőforráshoz CSingleLock .

BOOL Lock(DWORD dwTimeOut = INFINITE);

Paraméterek

dwTimeOut
Megadja, hogy mennyi ideig kell várni a szinkronizálási objektum rendelkezésre állására (jelezve). Ha INFINITE, Lock a visszatérés előtt megvárja, amíg az objektum jelzése meg nem jelenik.

Visszaadott érték

Nonzero, ha a függvény sikeres volt; egyéb esetben 0.

Megjegyzések

Ha a szinkronizálási objektum jelzést kap, sikeresen visszatér, Lock és a szál most már az objektum tulajdonosa. Ha a szinkronizálási objektum nincs aláírva (nem érhető el), Lock megvárja, amíg a szinkronizálási objektum jelzé válik a paraméterben dwTimeOut megadott ezredmásodpercig. Ha a szinkronizálási objektum nem lett jelezve a megadott idő alatt, Lock hibát ad vissza.

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

Felszabadítja a saját tulajdonában lévő CSingleLockszinkronizálási objektumot.

BOOL Unlock();

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

Paraméterek

lCount
A kiadáshoz szükséges hozzáférések száma. Nagyobbnak kell lennie, mint 0. Ha a megadott mennyiség miatt az objektum száma meghaladja a maximális értéket, a darabszám nem változik, és a függvény visszaadja a függvényt FALSE.

lPrevCount
Egy változóra mutat a szinkronizálási objektum előző számának fogadásához. Ha NULLaz előző szám nem lesz visszaadva.

Visszaadott érték

Nonzero, ha a függvény sikeres volt; egyéb esetben 0.

Megjegyzések

Ezt a függvényt CSingleLocka "destruktor" hívja meg.

Ha egy szemapó több hozzáférési számát kell felszabadítania, használja a második űrlapot Unlock , és adja meg a kiadáshoz szükséges hozzáférések számát.

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

Lásd még

hierarchiadiagram
CMultiLock osztály