Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Uyarı
Microsoft Foundation Sınıfları (MFC) kitaplığına destek verilmeye devam ediliyor. Ancak artık özellik eklemeyeceğiz veya belgeleri güncelleştirmeyeceğiz.
Ç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 CMultiLock nesnesi oluşturarak 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 UnlockCMultiLockveya 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 CMultiLockeş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 CMultiLockyönetilen eşitleme nesnesinin kilidini açmaya çalışır. İkinci biçimi, Unlock sahip CSemaphoreolduğu nesnelerin kilidini CMultiLock açmaya çalışır. Herhangi bir kilitli CMultiLock nesneye sahip değilse CSemaphore 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.