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
Veri Akışı Adı | Açıklama |
---|---|
CSingleLock::CSingleLock |
Bir CSingleLock nesne oluşturur. |
Genel Yöntemler
Veri Akışı Adı | Açıklama |
---|---|
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.
, , CCriticalSection
CMutex
ve eşitleme sınıflarını CSemaphore
kullanmak için, beklemeniz ve CEvent
eş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 CSyncObject
tü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();
Dönüş 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.
Dönüş 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 CSingleLock
eş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.
Dönüş 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();
}