Freigeben über


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

Siehe auch

Hierarchiediagramm
CMultiLock Klasse