Aracılığıyla paylaş


CComMultiThreadModel Sınıfı

CComMultiThreadModel bir değişkenin değerini artırmaya ve azaltmaya yönelik iş parçacığı güvenli yöntemler sağlar.

Sözdizimi

class CComMultiThreadModel

Üyeler

Genel Tür Tanımları

Veri Akışı Adı Açıklama
CComMultiThreadModel::AutoCriticalSection CComAutoCriticalSection sınıfına başvurur.
CComMultiThreadModel::CriticalSection CComCriticalSection sınıfına başvurur.
CComMultiThreadModel::ThreadModelNoCS CComMultiThreadModelNoCS sınıfına başvurur.

Genel Yöntemler

Veri Akışı Adı Açıklama
CComMultiThreadModel::D ecrement (Statik) Belirtilen değişkenin değerini iş parçacığı güvenli bir şekilde azaltma.
CComMultiThreadModel::Increment (Statik) Belirtilen değişkenin değerini iş parçacığı güvenli bir şekilde artırır.

Açıklamalar

Genellikle, CComObjectThreadModel veya CComGlobalsThreadModel iki typedef adı üzerinden CComMultiThreadModel kullanırsınız. Her typedef birinin başvurmuş olduğu sınıf, aşağıdaki tabloda gösterildiği gibi kullanılan iş parçacığı modeline bağlıdır:

typedef Tek iş parçacığı oluşturma Daire iş parçacığı oluşturma Ücretsiz iş parçacığı oluşturma
CComObjectThreadModel S S M
CComGlobalsThreadModel S M M

S= CComSingleThreadModel; M= CComMultiThreadModel

CComMultiThreadModel kendisi üç typedef ad tanımlar. AutoCriticalSection ve CriticalSection kritik bir bölümün sahipliğini elde etmek ve yayınlamak için yöntemler sağlayan başvuru sınıfları. ThreadModelNoCS references sınıfı [CComMultiThreadModelNoCS(ccommultithreadmodelnocs-class.md).

Gereksinimler

Üst bilgi: atlbase.h

CComMultiThreadModel::AutoCriticalSection

kullanırken CComMultiThreadModeltypedef adAutoCriticalSection, kritik bir bölüm nesnesinin sahipliğini almak ve serbest bırakmak için yöntemler sağlayan CComAutoCriticalSection sınıfına başvurur.

typedef CComAutoCriticalSection AutoCriticalSection;

Açıklamalar

CComSingleThreadModel ve CComMultiThreadModelNoCS ayrıca için AutoCriticalSectiontanımlar içerir. Aşağıdaki tabloda, iş parçacığı modeli sınıfı ile tarafından AutoCriticalSectionbaşvuruda bulunan kritik bölüm sınıfı arasındaki ilişki gösterilmektedir:

öğesinde tanımlanan sınıf Başvurulan sınıf
CComMultiThreadModel CComCriticalSection
CComSingleThreadModel CComFakeCriticalSection
CComMultiThreadModelNoCS CComFakeCriticalSection

'a AutoCriticalSectionek olarak CriticalSectiontypedefda kullanabilirsiniz. CRT başlangıç kodunu ortadan kaldırmak istiyorsanız genel nesnelerde veya statik sınıf üyelerinde belirtmemelisiniz AutoCriticalSection .

Örnek

Aşağıdaki kod CComObjectRootEx'in ardından modellenir ve bir iş parçacığı ortamında kullanıldığını gösterirAutoCriticalSection.

template<class ThreadModel>
class CMyAutoCritClass
{
public:
   typedef ThreadModel _ThreadModel;
   typedef typename _ThreadModel::AutoCriticalSection _CritSec;

   CMyAutoCritClass() : m_dwRef(0) {}

   ULONG InternalAddRef()
   {
      return _ThreadModel::Increment(&m_dwRef);
   }
   ULONG InternalRelease()
   {
      return _ThreadModel::Decrement(&m_dwRef);
   }
   void Lock() { m_critsec.Lock( ); }
   void Unlock() { m_critsec.Unlock(); }

private:
   _CritSec m_critsec;
   LONG m_dwRef;

Aşağıdaki tablolarda, şablon parametresine InternalAddRef ve uygulama tarafından kullanılan iş parçacığı modeline bağlı Lock olarak ve ThreadModel yöntemlerinin sonuçları gösterilir:

ThreadModel = CComObjectThreadModel

Metot Tekli veya Daire İş Parçacığı Oluşturma Boş İş Parçacığı Oluşturma
InternalAddRef Artış iş parçacığı açısından güvenli değildir. Artış iş parçacığı açısından güvenlidir.
Lock Hiçbir şey yapmaz; kilitlenmesi gereken kritik bir bölüm yok. Kritik bölüm kilitli.

ThreadModel = CComObjectThreadModel::ThreadModelNoCS

Metot Tekli veya Daire İş Parçacığı Oluşturma Boş İş Parçacığı Oluşturma
InternalAddRef Artış iş parçacığı açısından güvenli değildir. Artış iş parçacığı açısından güvenlidir.
Lock Hiçbir şey yapmaz; kilitlenmesi gereken kritik bir bölüm yok. Hiçbir şey yapmaz; kilitlenmesi gereken kritik bir bölüm yok.

CComMultiThreadModel::CriticalSection

kullanırken CComMultiThreadModeltypedef adCriticalSection, kritik bir bölüm nesnesinin sahipliğini almak ve serbest bırakmak için yöntemler sağlayan CComCriticalSection sınıfına başvurur.

typedef CComCriticalSection CriticalSection;

Açıklamalar

CComSingleThreadModel ve CComMultiThreadModelNoCS ayrıca için CriticalSectiontanımlar içerir. Aşağıdaki tabloda, iş parçacığı modeli sınıfı ile tarafından CriticalSectionbaşvuruda bulunan kritik bölüm sınıfı arasındaki ilişki gösterilmektedir:

öğesinde tanımlanan sınıf Başvurulan sınıf
CComMultiThreadModel CComCriticalSection
CComSingleThreadModel CComFakeCriticalSection
CComMultiThreadModelNoCS CComFakeCriticalSection

öğesine CriticalSectionek olarak AutoCriticalSectiontypedefda kullanabilirsiniz. CRT başlangıç kodunu ortadan kaldırmak istiyorsanız genel nesnelerde veya statik sınıf üyelerinde belirtmemelisiniz AutoCriticalSection .

Örnek

Bkz . CComMultiThreadModel::AutoCriticalSection.

CComMultiThreadModel::D ecrement

Bu statik işlev, p ile işaret edilen değişkenin değerini azalan InterlockedDecrement Win32 işlevini çağırır.

static ULONG WINAPI Decrement(LPLONG p) throw ();

Parametreler

p
[in] Azaltılacak değişkenin işaretçisi.

Dönüş Değeri

Azaltmanın sonucu 0 ise, Decrement 0 döndürür. Azaltmanın sonucu sıfır değilse, dönüş değeri de sıfır olmayandır, ancak azaltmanın sonucuna eşit olmayabilir.

Açıklamalar

InterlockedDecrement birden fazla iş parçacığının aynı anda bu değişkeni kullanmasını engeller.

CComMultiThreadModel::Increment

Bu statik işlev, işaret edilen değişkenin değerini p ile artıran InterlockedIncrement Win32 işlevini çağırır.

static ULONG WINAPI Increment(LPLONG p) throw ();

Parametreler

p
[in] Artırılacak değişken işaretçisi.

Dönüş Değeri

Artışın sonucu 0 ise, Increment 0 döndürür. Artışın sonucu sıfır değilse, dönüş değeri de sıfırdan farklı olur, ancak artışın sonucuna eşit olmayabilir.

Açıklamalar

InterlockedIncrement birden fazla iş parçacığının aynı anda bu değişkeni kullanmasını engeller.

CComMultiThreadModel::ThreadModelNoCS

kullanırkenCComMultiThreadModel, ad typedef CComMultiThreadModelNoCS sınıfına ThreadModelNoCS.

typedef CComMultiThreadModelNoCS ThreadModelNoCS;

Açıklamalar

CComMultiThreadModelNoCS bir değişkeni artırmaya ve azaltmaya yönelik iş parçacığı güvenli yöntemler sağlar; ancak kritik bir bölüm sağlamaz.

CComSingleThreadModel ve CComMultiThreadModelNoCS ayrıca için ThreadModelNoCStanımları içerir. Aşağıdaki tabloda, iş parçacığı modeli sınıfı ile tarafından ThreadModelNoCSbaşvuruda bulunan sınıf arasındaki ilişki gösterilmektedir:

öğesinde tanımlanan sınıf Başvurulan sınıf
CComMultiThreadModel CComMultiThreadModelNoCS
CComSingleThreadModel CComSingleThreadModel
CComMultiThreadModelNoCS CComMultiThreadModelNoCS

Örnek

Bkz . CComMultiThreadModel::AutoCriticalSection.

Ayrıca bkz.

CComSingleThreadModel Sınıfı
CComAutoCriticalSection Sınıfı
CComCriticalSection Sınıfı
Sınıfa Genel Bakış