Sınıf CSemaphore bir nesneyi temsil eden bir "semafor" — bir kaynağa erişmek için bir veya daha fazla süreçleri konuları sınırlı sayıda sağlayan eşitleme nesnesi. Bir CSemaphore nesnesi şu anda belirli bir kaynağa erişen iş parçacıklarının sayısını tutar.
Semaforlar yalnızca sınırlı sayıda kullanıcı-ebilmek çekmek paylaşılan bir kaynağa erişimi kontrol etmek yararlı olur. CSemaphore nesnesinin geçerli sayısı, izin verilen ek kullanıcı sayısıdır. Sayı sıfıra ulaştığında CSemaphore nesnesi tarafından denetlenen kaynağı bütün girişimleri sistem kuyruğa eklenir ve onlar kadar beklemek ya da zaman aşımı veya sayı 0'ın üzerinde yükselir. Denetlenen kaynağı aynı anda erişebilecek kullanıcı sayısını CSemaphore nesne yapım sırasında belirtilir.
Bir CSemaphore nesne kullanmak için bunu gerektiğinde CSemaphore nesnesi oluşturun. İstediğiniz beklenecek semaforu adı belirtin ve uygulamanızın başlangıçta kendi. Kurucunun döndüğünde semafor sonra erişebilirsiniz. İşiniz bittiğinde CSyncObject::Unlock arama kontrollü kaynağa erişme.
CSemaphore nesneleri kullanmak için alternatif bir yöntem CSemaphore türünde bir değişken veri üyesi kontrol etmek istediğiniz sınıfı eklemektir. Denetlenen nesne inşaat sırasında belirterek ilk erişim sayısını, en fazla erişim sayısını, semafor (işlem sınırları içinde kullanılacaksa,) adını ve güvenlik özniteliklerini istenilen CSemaphore veri üyesi yapıcısı arama.
CSemaphore nesneleri bu şekilde kaynakları contolled erişmek için ilk CSingleLockher iki türde bir değişken oluşturmak veya CMultiLockyazın , kaynağın erişim üye işlevi. Sonra kilit nesnenin kilit üye işlev (örneğin, CSingleLock::Lock) arayın. Bu noktada, iplik ya da kaynağa erişmek, kaynağının yayımlanması ve erişmek ya da yayımlanması için kaynak ve zaman aşımı, kaynağa erişmek başarısız beklemek bekleyin. Her durumda, kaynak, bir iş parçacığı güvenli şekilde erişilmiş. Kaynağı serbest bırakmak için kilit nesnenin kilidini üye işlevini (örneğin, CSingleLock::Unlock) veya kilit nesne kapsamı dışında kalan izin.
Alternatif olarak, tek başına bir CSemaphore nesnesi oluşturun ve kontrollü bir kaynağa erişmeyi denemeden önce açıkça erişim. Bu yöntem, daha net birisi kaynak kodunuzu okuma sırasında daha fazla hataya.
CSemaphore nesneleri kullanma hakkında daha fazla bilgi için bkz: yazı Multithreading: eşitleme sınıflarının nasıl kullanılacağını Visual c++ Programcı Kılavuzu.
# include lt;afxmt.h>
Sı&nıf üyeleri |nbsp; Temel sınıf | Hiyerarşi çizelgesi
Ör&neknbsp; mfc örnek uyumu