CSingleLock
-Klasse
Stellt den Mechanismus zur Zugriffssteuerung dar, mit dessen Hilfe der Zugriff auf Ressourcen in einem Multithreadprogramm gesteuert wird.
Syntax
class CSingleLock
Member
Öffentliche Konstruktoren
Name | Beschreibung |
---|---|
CSingleLock::CSingleLock |
Erstellt ein CSingleLock -Objekt. |
Öffentliche Methoden
Name | Beschreibung |
---|---|
CSingleLock::IsLocked |
Bestimmt, ob das Objekt gesperrt ist. |
CSingleLock::Lock |
Wartet auf ein Synchronisierungsobjekt. |
CSingleLock::Unlock |
Gibt ein Synchronisierungsobjekt frei. |
Hinweise
CSingleLock
verfügt nicht über eine Basisklasse.
Um die Synchronisierungsklassen CSemaphore
, CMutex
, CCriticalSection
und CEvent
, zu verwenden, müssen Sie entweder ein objekt oder CMultiLock
ein CSingleLock
Objekt erstellen, um auf das Synchronisierungsobjekt zu warten und loszulassen. Wird verwendet CSingleLock
, wenn Sie nur jeweils auf ein Objekt warten müssen. Verwenden Sie diese Verwendung CMultiLock
, wenn mehrere Objekte vorhanden sind, die Sie zu einem bestimmten Zeitpunkt verwenden können.
Um ein CSingleLock
Objekt zu verwenden, rufen Sie den Konstruktor innerhalb einer Memberfunktion in der Klasse der kontrollierten Ressource auf. Rufen Sie dann die IsLocked
Memberfunktion auf, um festzustellen, ob die Ressource verfügbar ist. Wenn dies der Grund ist, fahren Sie mit dem Rest der Memberfunktion fort. Wenn die Ressource nicht verfügbar ist, warten Sie entweder auf einen bestimmten Zeitraum, bis die Ressource freigegeben wurde, oder geben Sie einen Fehler zurück. Rufen Sie nach Abschluss der Verwendung der Ressource entweder die Unlock
Funktion auf, wenn das CSingleLock
Objekt erneut verwendet werden soll, oder lassen Sie es zu, dass das CSingleLock
Objekt zerstört wird.
CSingleLock
für Objekte muss ein Objekt vorhanden sein, das von CSyncObject
. Dies ist in der Regel ein Datenelement der Klasse der kontrollierten Ressource. Weitere Informationen zur Verwendung von CSingleLock
Objekten finden Sie im Artikel Multithreading: Verwenden der Synchronisierungsklassen.
Vererbungshierarchie
CSingleLock
Anforderungen
Header: afxmt.h
CSingleLock::CSingleLock
Erstellt ein CSingleLock
-Objekt.
explicit CSingleLock(
CSyncObject* pObject,
BOOL bInitialLock = FALSE);
Parameter
pObject
Verweist auf das Synchronisierungsobjekt, auf das zugegriffen werden soll. Kann nicht NULL
sein.
bInitialLock
Gibt an, ob zunächst versucht werden soll, auf das angegebene Objekt zuzugreifen.
Hinweise
Diese Funktion wird in der Regel innerhalb einer Access-Memberfunktion der gesteuerten Ressource aufgerufen.
Beispiel
// 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
Bestimmt, ob das dem CSingleLock
Objekt zugeordnete Objekt nicht signalfähig ist (nicht verfügbar).
BOOL IsLocked();
Rückgabewert
Nonzero, wenn das Objekt gesperrt ist; andernfalls 0.
Beispiel
// 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
Rufen Sie diese Funktion auf, um Zugriff auf die Ressource zu erhalten, die vom Synchronisierungsobjekt gesteuert wird, das dem CSingleLock
Konstruktor bereitgestellt wird.
BOOL Lock(DWORD dwTimeOut = INFINITE);
Parameter
dwTimeOut
Gibt die Zeit an, die gewartet werden soll, bis das Synchronisierungsobjekt verfügbar ist (signalisiert). Wenn INFINITE
, Lock
wartet, bis das Objekt signalisiert wird, bevor es zurückgegeben wird.
Rückgabewert
Nonzero, wenn die Funktion erfolgreich war; andernfalls 0.
Hinweise
Wenn das Synchronisierungsobjekt signalisiert wird, wird es erfolgreich zurückgegeben, Lock
und der Thread besitzt nun das Objekt. Wenn das Synchronisierungsobjekt nicht signalisiert ist (nicht verfügbar), Lock
wartet, bis das Synchronisierungsobjekt bis zur Anzahl von Millisekunden signalisiert wird, die dwTimeOut
im Parameter angegeben ist. Wenn das Synchronisierungsobjekt in der angegebenen Zeitspanne nicht signalisiert wurde, Lock
wird ein Fehler zurückgegeben.
Beispiel
// 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
Gibt das Synchronisierungsobjekt im Besitz von CSingleLock
.
BOOL Unlock();
BOOL Unlock(
LONG lCount,
LPLONG lPrevCount = NULL);
Parameter
lCount
Anzahl der Zugänge, die freigegeben werden sollen. Muss größer als 0 sein. Wenn der angegebene Betrag dazu führen würde, dass die Anzahl des Objekts sein Maximum überschreitet, wird die Anzahl nicht geändert, und die Funktion gibt zurück FALSE
.
lPrevCount
Verweist auf eine Variable, um die vorherige Anzahl des Synchronisierungsobjekts zu erhalten. Wenn NULL
die vorherige Anzahl nicht zurückgegeben wird.
Rückgabewert
Nonzero, wenn die Funktion erfolgreich war; andernfalls 0.
Hinweise
Diese Funktion wird von CSingleLock
's Destruktor' aufgerufen.
Wenn Sie mehr als eine Zugriffsanzahl eines Semaphors freigeben müssen, verwenden Sie die zweite Form, Unlock
und geben Sie die Anzahl der freizugebenden Zugriffe an.
Beispiel
// 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();
}