Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Reprezentuje mechanizm kontroli dostępu używany w kontrolowaniu dostępu do zasobu w programie wielowątkowym.
Składnia
class CSingleLock
Elementy członkowskie
Konstruktory publiczne
| Nazwa/nazwisko | opis |
|---|---|
CSingleLock::CSingleLock |
CSingleLock Tworzy obiekt. |
Metody publiczne
| Nazwa/nazwisko | opis |
|---|---|
CSingleLock::IsLocked |
Określa, czy obiekt jest zablokowany. |
CSingleLock::Lock |
Czeka na obiekt synchronizacji. |
CSingleLock::Unlock |
Zwalnia obiekt synchronizacji. |
Uwagi
CSingleLock nie ma klasy bazowej.
Aby można było używać klas CSemaphoresynchronizacji , , CMutexCCriticalSectioni CEvent, należy utworzyć CSingleLock obiekt lub CMultiLock czekać i zwolnić obiekt synchronizacji. Użyj CSingleLock polecenia , gdy trzeba poczekać tylko na jeden obiekt naraz. Użyj CMultiLock polecenia , gdy istnieje wiele obiektów, których można użyć w określonym czasie.
Aby użyć CSingleLock obiektu, wywołaj jego konstruktor wewnątrz funkcji składowej w kontrolnej klasie zasobu. Następnie wywołaj funkcję składową IsLocked , aby określić, czy zasób jest dostępny. Jeśli tak jest, kontynuuj z pozostałą częścią funkcji składowej. Jeśli zasób jest niedostępny, zaczekaj na określoną ilość czasu, aż zasób ma zostać zwolniony lub wystąpi błąd powrotu. Po zakończeniu korzystania z zasobu wywołaj Unlock funkcję , jeśli CSingleLock obiekt ma zostać użyty ponownie, lub zezwól CSingleLock na zniszczenie obiektu.
CSingleLock obiekty wymagają obecności obiektu pochodzącego z CSyncObjectobiektu . Zazwyczaj jest to element członkowski danych klasy kontrolowanego zasobu. Aby uzyskać więcej informacji na temat używania obiektów, zobacz artykuł Multithreading: How to Use the Synchronization Classes (Jak używać CSingleLock klas synchronizacji).
Hierarchia dziedziczenia
CSingleLock
Wymagania
Nagłówek: afxmt.h
CSingleLock::CSingleLock
CSingleLock Tworzy obiekt.
explicit CSingleLock(
CSyncObject* pObject,
BOOL bInitialLock = FALSE);
Parametry
pObject
Wskazuje na dostęp do obiektu synchronizacji. Nie można mieć .NULL
bInitialLock
Określa, czy należy początkowo podjąć próbę uzyskania dostępu do dostarczonego obiektu.
Uwagi
Ta funkcja jest zwykle wywoływana z poziomu funkcji składowej dostępu kontrolowanego zasobu.
Przykład
// 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
Określa, czy obiekt skojarzony z obiektem CSingleLock jest niepodpisany (niedostępny).
BOOL IsLocked();
Wartość zwracana
Nonzero, jeśli obiekt jest zablokowany; w przeciwnym razie 0.
Przykład
// 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
Wywołaj tę funkcję, aby uzyskać dostęp do zasobu kontrolowanego przez obiekt synchronizacji dostarczony do konstruktora CSingleLock .
BOOL Lock(DWORD dwTimeOut = INFINITE);
Parametry
dwTimeOut
Określa czas oczekiwania na dostępność obiektu synchronizacji (sygnał). Jeśli INFINITEparametr Lock będzie czekać, aż obiekt zostanie zasygnalizowany przed zwróceniem.
Wartość zwracana
Nonzero, jeśli funkcja zakończyła się pomyślnie; w przeciwnym razie 0.
Uwagi
Jeśli obiekt synchronizacji zostanie zasygnalizowany, zostanie zwrócony pomyślnie, Lock a wątek jest teraz właścicielem obiektu. Jeśli obiekt synchronizacji jest niepodpisany (niedostępny), Lock zaczeka na zasygnalizowanie obiektu synchronizacji do liczby milisekund określonych w parametrze dwTimeOut . Jeśli obiekt synchronizacji nie został zasygnalizowany w określonym czasie, Lock zwraca błąd.
Przykład
// 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
Zwalnia obiekt synchronizacji należący do CSingleLockelementu .
BOOL Unlock();
BOOL Unlock(
LONG lCount,
LPLONG lPrevCount = NULL);
Parametry
lCount
Liczba dostępu do wydania. Wartość musi być większa niż 0. Jeśli określona kwota spowoduje przekroczenie maksymalnej liczby obiektu, liczba nie zostanie zmieniona, a funkcja zwróci FALSEwartość .
lPrevCount
Wskazuje zmienną, aby otrzymać poprzednią liczbę obiektu synchronizacji. Jeśli NULLwartość , poprzednia liczba nie zostanie zwrócona.
Wartość zwracana
Nonzero, jeśli funkcja zakończyła się pomyślnie; w przeciwnym razie 0.
Uwagi
Ta funkcja jest wywoływana przez CSingleLockdestruktor .
Jeśli musisz zwolnić więcej niż jedną liczbę dostępu semafora, użyj drugiej formy Unlock i określ liczbę dostępu do wydania.
Przykład
// 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();
}