Aracılığıyla paylaş


CSingleLock Sınıfı

Çok iş parçacıklı bir programdaki bir kaynağa erişimi denetlemek için kullanılan erişim denetimi mekanizmasını temsil eder.

Sözdizimi

class CSingleLock

Üyeler

Ortak Oluşturucular

Ad Tanım
CSingleLock::CSingleLock Bir CSingleLock nesne oluşturur.

Genel Yöntemler

Ad Tanım
CSingleLock::IsLocked Nesnenin kilitli olup olmadığını belirler.
CSingleLock::Lock Eşitleme nesnesinde bekler.
CSingleLock::Unlock Eşitleme nesnesini serbest bırakır.

Açıklamalar

CSingleLock temel sınıfı yoktur.

, , CCriticalSectionCMutexve eşitleme sınıflarını CSemaphorekullanmak için, beklemeniz ve CEventeşitleme nesnesini serbest bırakmanız için bir CSingleLock veya CMultiLock nesnesi oluşturmanız gerekir. Tek seferde yalnızca bir nesnede beklemeniz gerektiğinde kullanın CSingleLock . Belirli bir zamanda kullanabileceğiniz birden çok nesne olduğunda kullanın CMultiLock .

Bir CSingleLock nesneyi kullanmak için, denetlenen kaynağın sınıfında bir üye işlevi içinde oluşturucusunu çağırın. Ardından kaynağın IsLocked kullanılabilir olup olmadığını belirlemek için üye işlevini çağırın. Bu durumda üye işlevinin geri kalanıyla devam edin. Kaynak kullanılamıyorsa, kaynağın serbest bırakılması için belirli bir süre bekleyin veya hata döndürebilirsiniz. Kaynağın kullanımı tamamlandıktan sonra, nesne yeniden kullanılacaksa CSingleLock işlevini çağırın Unlock veya nesnenin CSingleLock yok edilmesine izin verin.

CSingleLock nesneleri, öğesinden CSyncObjecttüretilen bir nesnenin varlığını gerektirir. Bu genellikle denetlenen kaynağın sınıfının veri üyesidir. Nesneleri kullanma CSingleLock hakkında daha fazla bilgi için Çoklu İş Parçacığı Kullanımı: Eşitleme Sınıflarını Kullanma makalesine bakın.

Devralma Hiyerarşisi

CSingleLock

Gereksinimler

Üstbilgi:afxmt.h

CSingleLock::CSingleLock

Bir CSingleLock nesne oluşturur.

explicit CSingleLock(
    CSyncObject* pObject,
    BOOL bInitialLock = FALSE);

Parametreler

pObject
Erişilecek eşitleme nesnesini gösterir. Olamaz.NULL

bInitialLock
Başlangıçta sağlanan nesneye erişmeye çalışılıp denenmeyeceğini belirtir.

Açıklamalar

Bu işlev genellikle denetlenen kaynağın bir erişim üyesi işlevi içinden çağrılır.

Örnek

// 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

Nesneyle ilişkilendirilmiş nesnenin CSingleLock imzasız (kullanılamıyor) olup olmadığını belirler.

BOOL IsLocked();

İade Değeri

Nesne kilitliyse sıfır olmayan; aksi takdirde 0.

Örnek

// 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

Oluşturucuya sağlanan eşitleme nesnesi tarafından denetlenen kaynağa erişim kazanmak için bu işlevi çağırın CSingleLock .

BOOL Lock(DWORD dwTimeOut = INFINITE);

Parametreler

dwTimeOut
Eşitleme nesnesinin kullanılabilir olmasını beklenecek süreyi belirtir (sinyal görüntülenir). ise INFINITE, Lock geri dönmeden önce nesne işaretlenene kadar bekler.

İade Değeri

İşlev başarılı olursa sıfır olmayan; aksi takdirde 0.

Açıklamalar

Eşitleme nesnesine sinyal gönderiliyorsa, Lock başarıyla döndürülecek ve iş parçacığı artık nesneye sahip olacaktır. Eşitleme nesnesi imzalanmamışsa (kullanılamıyorsa), Lock eşitleme nesnesinin parametrede dwTimeOut belirtilen milisaniye sayısına kadar işaretlenmesini bekler. Eşitleme nesnesi belirtilen süre içinde işaretlenmediyse hata Lock döndürür.

Örnek

// 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

sahip olduğu CSingleLockeşitleme nesnesini serbest bırakır.

BOOL Unlock();

BOOL Unlock(
    LONG lCount,
    LPLONG lPrevCount = NULL);

Parametreler

lCount
Yayına erişim sayısı. 0'dan büyük olmalıdır. Belirtilen miktar nesnenin sayısının üst sınırını aşmasına neden olacaksa, sayı değiştirilmez ve işlevi döndürür FALSE.

lPrevCount
Eşitleme nesnesinin önceki sayısını almak için bir değişkeni gösterir. ise NULL, önceki sayı döndürülmüyor.

İade Değeri

İşlev başarılı olursa sıfır olmayan; aksi takdirde 0.

Açıklamalar

Bu işlev'in yıkıcısı tarafından CSingleLockçağrılır.

Bir semaforun birden fazla erişim sayısını serbest bırakmanız gerekiyorsa, öğesinin ikinci biçimini Unlock kullanın ve serbest bırakılacak erişim sayısını belirtin.

Örnek

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

Ayrıca bkz.

Hiyerarşi Grafiği
CMultiLock Sınıfı