Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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();
}