Freigeben über


CCriticalSection::Lock

Rufen Sie die Memberfunktion auf, um zum kritischen Abschnittsobjekt zu erhalten.

BOOL Lock( ); 
BOOL Lock( 
   DWORD dwTimeout  
);

Parameter

  • dwTimeout
    Lock ignoriert diesen Parameterwert.

Rückgabewert

Ungleich 0 (null), wenn die Funktion erfolgreich war; 0 andernfalls.

Hinweise

Lock ist ein blockierender Aufruf, der nicht zurückgibt, bis das kritischen Abschnittsobjekt signalisiert wird (verfügbar wird).

Wenn festgelegte wartet erforderlich sind, können Sie ein CMutex-Objekt anstelle eines Objekts CCriticalSection verwenden.

Wenn Lock den erforderlichen Systemspeicher nicht zuordnen kann, wird eine Arbeitsspeicherausnahme (des Typs) CMemoryException automatisch ausgelöst.

Beispiel

In diesem Beispiel wird der geschachtelten Ansatz des kritischen Abschnitts, indem Zugriff auf eine freigegebene Ressource (das statische _strShared-Objekt) mithilfe eines freigegebenen CCriticalSection-Objekts steuert. Die SomeMethod-Funktion wird das Aktualisieren einer freigegebenen Ressource in sicherer Weise.

//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();
}

Anforderungen

Header: afxmt.h

Siehe auch

Referenz

CCriticalSection-Klasse

Hierarchiediagramm

CSingleLock::Lock