CMultiLock Sınıfı
Çok iş parçacıklı bir programdaki kaynaklara erişimi denetlemek için kullanılan erişim denetimi mekanizmasını temsil eder.
Sözdizimi
class CMultiLock
Üyeler
Ortak Oluşturucular
Veri Akışı Adı | Açıklama |
---|---|
CMultiLock::CMultiLock | Bir CMultiLock nesne oluşturur. |
Genel Yöntemler
Veri Akışı Adı | Açıklama |
---|---|
CMultiLock::IsLocked | Dizideki belirli bir eşitleme nesnesinin kilitli olup olmadığını belirler. |
CMultiLock::Lock | Eşitleme nesneleri dizisini bekler. |
CMultiLock::Unlock | Sahip olunan tüm eşitleme nesnelerini serbest bırakır. |
Açıklamalar
CMultiLock
temel sınıfına sahip değildir.
CSemaphore, CMutex ve CEvent eşitleme sınıflarını kullanmak için bir veya CSingleLock nesnesi oluşturarak CMultiLock
eşitleme nesnesini bekleyebilir ve serbest bırakabilirsiniz. Belirli bir zamanda kullanabileceğiniz birden çok nesne olduğunda kullanın CMultiLock
. Tek seferde yalnızca bir nesnede beklemeniz gerektiğinde kullanın CSingleLock
.
Nesne CMultiLock
kullanmak için, önce beklemek istediğiniz eşitleme nesnelerinin bir dizisini oluşturun. Ardından, denetlenen kaynağın CMultiLock
sınıfında bir üye işlevi içinde nesnesinin oluşturucusunu çağırın. Ardından, bir kaynağın kullanılabilir olup olmadığını (sinyalli) belirlemek için Üyeyi kilitle işlevini çağırın. Varsa, üye işlevinin geri kalanıyla devam edin. Kullanılabilir kaynak yoksa, kaynağın serbest bırakılması için belirli bir süre bekleyin veya hata döndürebilirsiniz. Kaynak kullanımı tamamlandıktan sonra nesne yeniden kullanılacaksa CMultiLock
Unlock işlevini çağırın veya nesnenin CMultiLock
yok edilmesine izin verin.
CMultiLock
nesneler, bir iş parçacığının yanıt verebileceği çok sayıda CEvent
nesne olduğunda en kullanışlı olanlardır. Tüm CEvent
işaretçileri içeren bir dizi oluşturun ve öğesini çağırın Lock
. Bu, iş parçacığının olaylardan biri sinyal alınana kadar beklemesine neden olur.
Nesneleri kullanma CMultiLock
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
CMultiLock
Gereksinimler
Üst bilgi: afxmt.h
CMultiLock::CMultiLock
Bir CMultiLock
nesne oluşturur.
CMultiLock(
CSyncObject* ppObjects [ ],
DWORD dwCount,
BOOL bInitialLock = FALSE);
Parametreler
ppObjects
Üzerinde beklenecek eşitleme nesnelerine yönelik işaretçi dizisi. NULL olamaz.
dwCount
ppObjects içindeki nesne sayısı. 0'dan büyük olmalıdır.
bInitialLock
Başlangıçta sağlanan nesnelerden herhangi birine erişmeye çalışılıp denenmeyeceğini belirtir.
Açıklamalar
Bu işlev, beklenecek eşitleme nesneleri dizisi oluşturulduktan sonra çağrılır. Genellikle, eşitleme nesnelerinden birinin kullanılabilir olmasını beklemesi gereken iş parçacığının içinden çağrılır.
CMultiLock::IsLocked
Belirtilen nesnenin imzasız (kullanılamıyor) olup olmadığını belirler.
BOOL IsLocked(DWORD dwItem);
Parametreler
dwItem
Durumu sorgulanan nesneye karşılık gelen nesne dizisindeki dizin.
Dönüş Değeri
Belirtilen nesne kilitliyse sıfır olmayan; aksi takdirde 0.
CMultiLock::Lock
Oluşturucuya sağlanan eşitleme nesneleri tarafından denetlenen bir veya daha fazla kaynağa erişim elde etmek için bu işlevi çağırın CMultiLock
.
DWORD Lock(
DWORD dwTimeOut = INFINITE,
BOOL bWaitForAll = TRUE,
DWORD dwWakeMask = 0);
Parametreler
dwTimeOut
Eşitleme nesnesinin kullanılabilir olmasını beklenecek süreyi belirtir (sinyal görüntülenir). SONSUZ ise, Lock
geri dönmeden önce nesnenin işaretlenmesini bekler.
bWaitForAll
Döndürülmeden önce bekleyen tüm nesnelerin aynı anda işaretlenip işaretlenmediğini belirtir. YANLIŞ ise, Lock
bekleyen nesnelerden herhangi biri işaretlendiğinde geri döner.
dwWakeMask
Beklemeyi durdurmasına izin verilen diğer koşulları belirtir. Bu parametre için kullanılabilir seçeneklerin tam listesi için bkz . Windows SDK'sında MsgWaitForMultipleObjects .
Dönüş Değeri
Başarısız Lock
olursa, - 1 döndürür. Başarılı olursa, aşağıdaki değerlerden birini döndürür:
WAIT_OBJECT_0 ile WAIT_OBJECT_0 + arasında (nesne sayısı - 1)
bWaitForAll TRUE ise, tüm nesnelere işaret edilir (kullanılabilir). bWaitForAll YANLIŞ ise, dönüş değeri - WAIT_OBJECT_0, nesnenin sinyalli (kullanılabilir) nesne dizisindeki dizindir.
WAIT_OBJECT_0 + (nesne sayısı)
dwWakeMask içinde belirtilen bir olay, iş parçacığının giriş kuyruğunda kullanılabilir.
WAIT_ABANDONED_0 ile WAIT_ABANDONED_0 + arasında (nesne sayısı - 1)
bWaitForAll TRUE ise, tüm nesneler işaretlenir ve nesnelerden en az biri terk edilmiş bir mutex nesnesidir. bWaitForAll YANLIŞ ise, dönüş değeri - WAIT_ABANDONED_0, beklemeyi karşılayan terk edilmiş mutex nesnesinin nesne dizisindeki dizindir.
WAIT_TIMEOUT
dwTimeOut içinde belirtilen zaman aşımı aralığı, bekleme başarılı olmadan sona erdi.
Açıklamalar
bWaitForAll TRUE ise, Lock
tüm eşitleme nesneleri aynı anda sinyal alır almaz başarıyla döndürülecektir. bWaitForAll YANLIŞ ise, Lock
eşitleme nesnelerinden biri veya daha fazlası sinyal alır almaz geri döner.
Lock
Hemen döndüremezse, döndürmeden önce dwTimeOut parametresinde belirtilen milisaniye sayısından fazla beklemez. dwTimeOut INFINITE ise, Lock
bir nesneye erişim elde edilene veya dwWakeMask'te belirtilen bir koşul karşılanana kadar döndürülmeyecektir. Aksi takdirde, bir eşitleme nesnesi elde edebildiyse Lock
, başarıyla döndürülecektir; aksi takdirde hata döndürür.
CMultiLock::Unlock
sahip olduğu CMultiLock
eşitleme nesnesini serbest bırakır.
BOOL Unlock();
BOOL Unlock(
LONG lCount,
LPLONG lPrevCount = NULL);
Parametreler
lCount
Yayınlanması gereken başvuru 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şlev YANLIŞ döndürür.
lPrevCount
Eşitleme nesnesinin önceki sayısını almak için bir değişkeni gösterir. NULL ise, önceki sayı döndürülür.
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 CMultiLock
çağrılır.
İlk biçimi Unlock
tarafından CMultiLock
yönetilen eşitleme nesnesinin kilidini açmaya çalışır. İkinci biçimi, Unlock
sahip CMultiLock
olduğu nesnelerin kilidini CSemaphore
açmaya çalışır. Herhangi bir kilitli CSemaphore
nesneye sahip değilse CMultiLock
işlev FALSE döndürür; aksi takdirde TRUE döndürür. lCount ve lpPrevCount, CSingleLock::Unlock parametreleriyle tam olarak aynıdır. İkinci biçimi Unlock
çok kilitli durumlar için nadiren geçerlidir.