TN064: Daire ActiveX denetimleri iş parçacığı modeli

Bu teknik not, iş parçacığı daire-modeli: bir ActiveX denetimi etkinleştirmek açıklar. İş parçacığı daire-modeli Visual c++ sürüm 4.2 veya daha sonra yalnızca desteklenen Not.

İş parçacığı daire-modeli nedir?

Grup modeli, ActiveX denetimleri, içinde bir çok iş parçacıklı konteyner uygulaması gibi katıştırılmış nesneleri destekleyen bir yaklaşımdır. Uygulama birden çok iş parçacığı olabilir, ancak her katıştırılmış nesne örneğini "bir daire," tek bir iş parçacığında yürütülür atanacaktır. Diğer bir deyişle, tüm aramaları halinde denetim örneği aynı iş parçacığında ne olacak.

Ancak, farklı örnekleri kontrol aynı tür için farklı daireler atanabilir. Birden çok denetim ortak (örneğin, statik veya genel veri) veri paylaşıyorsanız, yani, sonra bu paylaşılan veri erişim önemli bir bölümü gibi bir eşitleme nesnesi korunması gerekir.

Apartman iş parçacığı modeli ile ilgili tam bilgi için lütfen işlemleri ve iş parçacıklarını ole Programcı Başvurusu.

Neden destek iş parçacığı daire modeli?

İş parçacığı modeli daire destekleyen denetimler Grup modeli de destek çok iş parçacıklı konteyner uygulamalarda kullanılabilir. İş parçacığı modeli daire etkinleştirmezseniz, Denetim kullanılabilir kapsayıcılar potansiyel kümesini sınırlar.

Özellikle az veya hiç paylaşılan veri varsa çoğu denetimler için kolay iş parçacığı daire-modeli etkinleştirilmesi.

Paylaşılan verilerin korunması

Paylaşılan veri denetim kullanıyorsa, statik üye değişkeni gibi verileri birden çok iş parçacığı aynı zamanda verileri değiştirmesini önlemek için önemli bir bölümü ile korunmalıdır erişimi. Bu amaca yönelik önemli bir bölümünü ayarlamak için denetimin sınıf CCriticalSection sınıfında bir durağan üye değişkeni bildirin. Kodunuzu Paylaşılan verilere erişen her yerde bu kritik bölüm nesnesinin Lock ve Unlock üye işlevler kullanma.

, Örneğin bir denetim sınıfın bütün örnekleri tarafından paylaşılan bir dize korumak için gereken düşünün. Bu dize, bir statik üyesi değişkende saklanır ve önemli bir bölümü tarafından korunuyor. Denetimin sınıf bildirimi şunları içerir:

cSampleCtrl sı&nıfı: Genel COleControl
{
 nbsp;  ...
    statik CString _strShared;
    statik CCriticalSection _critSect;
}

Uygulama sınıfı için bu değişkenlerin tanımları içerir:

 int CString CSampleCtrl::_strShared;
CCriticalSection CSampleCtrl::_critSect

Erişim _strShared statik üyesi sonra mahfuz kritik bölümü tarafından:

void CSampleCtrl::SomeMethod()
{
 nbsp;  _critSect.Lock();
    Eğer (_strShared.Empty())
        _strShared = "<text>";
    _critSect.Unlock();
    ...
}

Daire-modeli uyumlu bir denetim kaydı

İş parçacığı daire-modeli destekleyen denetimler belirten bu yeteneği kayıt defterinde "Apartman" değerinin adlı değerini "ThreadingModel" sınıf kimliğialtında kendi sınıf kimliği kayıt defteri girdisini ekleyerek \Inprocserver32 anahtar. Bu anahtar otomatik olarak kontrol için kayıtlı olmak neden geçmek afxRegApartmentThreading bayrağı AfxOleRegisterControlClass altıncı parametresindeki:

Bool CSampleCtrl::CSampleCtrlFactory::UpdateRegistry(BOOL bRegister)
{
    Eğer (bRegister)
        return AfxOleRegisterControlClass)
            AfxGetInstanceHandle(),
            m_clsid,
            m_lpszProgID,
            IDS_SAMPLE,
            IDB_SAMPLE,
            afxRegApartmentThreading,
            _dwSampleOleMisc,
            _tlid,
            _wVerMajor,
            _wVerMinor);
    başka
        AfxOleUnregisterClass (m_clsid, m_lpszProgID); return
}

Denetim projenizi Visual c++ sürüm 4.1 veya daha sonra ControlWizard tarafından oluşturulmuşsa bu bayrak zaten kodu mevcut olacaktır. İş parçacığı modeli kayıt için gerekli değişiklik.

Proje ControlWizard önceki bir sürümü tarafından oluşturulmuş, varolan kodunuzu altıncı parametre olarak bir Boole değeri olacaktır. Varolan parametre true ise, onu değiştirmek afxRegInsertable | afxRegApartmentThreading . Varolan parametre false ise, onu değiştirmek afxRegApartmentThreading.

Denetim modeli Apartman iş parçacığı kurallarını takip değil, sen değil geçmesi gereken afxRegApartmentThreading Bu parametre.

Teknik notlar numarasına göre |nbsp; Teknik notlar kategorisine göre

Index