CCriticalSection::Lock
Wywołanie tej funkcji Członkowskich uzyskanie dostępu do obiektu sekcji krytycznej.
BOOL Lock( );
BOOL Lock(
DWORD dwTimeout
);
Parametry
- dwTimeout
Lockignoruje wartości tego parametru.
Wartość zwracana
Niezerowa, jeśli funkcja zakończyła się pomyślnie; 0 inaczej.
Uwagi
Lockto wywołanie blokowania, którego nie zwróci, aż obiekt sekcję krytyczną jest sygnalizowany (staje się dostępna).
Jeżeli konieczne są czasu oczekiwania można używać CMutex obiekt zamiast CCriticalSection obiektu.
Jeśli Lock nie powiedzie się przydzielić pamięci systemu niezbędne wyjątek pamięci (typu CMemoryException) jest generowany automatycznie.
Przykład
Ten przykład demonstruje podejście zagnieżdżonych sekcji krytycznej, kontrolowanie dostępu do zasobu udostępnionego (statycznego _strShared obiektu) za pomocą udostępnionego CCriticalSection obiektu.SomeMethod Funkcja demonstruje aktualizacji zasobu udostępnionego w bezpieczny sposób.
//Definition of critical section class
class CMyCritSectClass
{
static CString _strShared; //shared resource
static CCriticalSection _critSect;
public:
CMyCritSectClass(void) {}
~CMyCritSectClass(void) {}
void SomeMethod(void); //locks, modifies, and unlocks shared resource
};
//Declaration of static members and SomeMethod
CString CMyCritSectClass::_strShared;
CCriticalSection CMyCritSectClass::_critSect;
void CMyCritSectClass::SomeMethod()
{
_critSect.Lock();
if (_strShared == "")
_strShared = "<text>";
_critSect.Unlock();
}
Wymagania
Nagłówek: afxmt.h