İş Parçacığı Modelini Seçme

Bir nesne için iş parçacığı modelinin seçilmesi, nesnenin işlevine bağlıdır. Kapsamlı G/Ç kullanan bir nesne, G/Ç gecikmesi sırasında arabirim çağrılarına izin vererek istemcilere en yüksek yanıtı sağlamak için serbest iş parçacığı oluşturma desteği sağlayabilir. Öte yandan, kullanıcıyla etkileşim kuran bir nesne, gelen COM çağrılarını pencere işlemleriyle eşitlemek için grup iş parçacığı oluşturma desteği verebilir.

COM, çağrı başına eşitleme sağladığından, tek iş parçacıklı dairelerde daire iş parçacığı modeli desteği daha kolaydır. Nesnenin eşitleme gerektirdiğinden serbest iş parçacığı desteği daha zordur; ancak, eşitleme kodun daha küçük bölümleri için uygulanabildiğinden istemcilerin yanıtı daha iyi olabilir.

Tip

COM istemcileri için hızlı karar kılavuzu:

// UI thread or main thread with a message loop → STA
HRESULT hr = CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE);

// Background/worker thread with no message loop → MTA
HRESULT hr = CoInitializeEx(nullptr, COINIT_MULTITHREADED);

COM sunucuları (işlem içi DLL'ler) için, anahtarın ThreadingModel altında InprocServer32 kayıt defteri değerini ayarlayın:

  • Apartment — Nesne çağıranın STA'sında çalışır (kullanıcı arabirimiyle ilgili nesneler için en yaygın)
  • Free — Nesne MTA'da çalışır
  • Both — Nesne çağıranın dairesinde çalışır (genel amaçlı nesneler için en iyi)
  • Neutral — Nesne Tarafsız Dairede çalışır (yalnızca COM+)

Emin değilseniz, ile Both başlayın ve nesnenizin iş parçacığı açısından güvenli olduğundan emin olun. Bu, COM'un nesneyi çağıranın dairesinde oluşturmasına izin vererek apartmanlar arası sıralamayı azaltır, ancak sıralama yine de daireler arası geri aramalar veya diğer dairelerden erişim için gerçekleşebilir.

Daireler arasında Arabirimlere Erişim

Çok İş Parçacıklı Yapılar

In-Process Sunucu İş Parçacığı Sorunları

İşlemler, İş Parçacıkları ve Uygulama Modelleri

Single-Threaded ve Çoklu İş Parçacığı İletişimi

Single-Threaded Apartman Daireleri