COM+ İş Parçacığı Oluşturma Modelleri

COM+ iş parçacığı modelleri, apartman adı verilen bir nesne koleksiyonu etrafında tasarlanmıştır. Daire, aşağıdaki çizimde gösterildiği gibi bir işlemde yer alan bağlamlardan oluşan bir koleksiyondur.

Bir etkinlikte, bir dairede, bir süreç içinde bağlamların koleksiyonunu gösteren diyagram.

Daire içindeki çağrılar doğrudan yapılırken, daireler genelindeki çağrılar (işlem dışı) dolaylıdır ve ara sunucu ve saplama kodu gerektirir. Daireler, farklı eşitleme ve yeniden giriş özelliklerine sahip nesnelere olanak sağlar ve iki kategoriye sahiptir: tek iş parçacıklı ve çok iş parçacıklı. Tek iş parçacıklı daire (STA) modeli içindeki nesneler, oluşturuldukları belirli iş parçacığında yürütülür. STA'lar aynı anda yalnızca bir yöntemin yürütülmesine izin verir. Bunlar kullanıcı arabirimleri için tasarlanmıştır ve gelen çağrıları işlemek için Microsoft Windows ileti kuyruğuna güvenir.

Çok iş parçacıklı bir apartmandaki (MTA) nesneler herhangi bir iş parçacığında çalıştırılır ve aynı anda herhangi bir sayıda yöntemin eşzamanlı çalışmasına izin verir. MTA'lar örtük olarak yeniden giriş desteği sağlar.

COM+ sınıfları, COM+ öğesinin nesneyi uygun dairede oluşturmasına izin veren bir ThreadingModel özelliğiyle işaretlenir. Bir nesnenin hangi dairede oluşturulduğunu belirlemek için CoCreateInstanceThreadingModel özelliğini kullanır.

İş parçacıklarının COM+ kullanabilmesi için CoInitializeEx çağırması gerekir. Bu, bunları doğru daire ve bağlam içinde oluşturur. Ana iş parçacığı dairesinin CoInitializeExtarafından çağrılan ilk STA olduğu belirlenir. Bu genellikle bir işlemin ana iş parçacığıyla ilişkilendirilir. CoInitializeEx, aşağıdaki flamaları ayarlayarak thread'in gerektirdiği daire türünü gösteren:

  • COINIT_MULTITHREADED—İş parçacığını çok iş parçacıklı dairede konumlandırır.
  • COINIT_APARTMENTTHREADED—İş parçacığını yeni bir STA'ya yerleştirir.

Bu bölümdeki aşağıdaki konular COM+'da iş parçacığı oluşturma modellerini ve dairelerini kullanma hakkında daha fazla bilgi sağlar:

İşlemler, Thread'ler ve Apartmanlar

ThreadingModel