Çoklu İş Parçacığı Kullanımı Sorunları (Direct3D 9)

Tam ekran Direct3D uygulamaları, Direct3D çalışma süresi için bir pencere tutamacı sağlar. Pencere çalışma zamanına bağlı. Bu, uygulamanın pencere iletisi yordamına geçirilen tüm iletilerin ilk olarak Direct3D çalışma zamanının kendi ileti işleme yordamı tarafından incelendiği anlamına gelir.

Görüntüleme modu değişiklikleri, temel işletim sisteminde yerleşik olarak bulunan destek yordamlarından etkilenir. Mod değişiklikleri gerçekleştiğinde, sistem tüm uygulamalara birkaç ileti yayınlar. Direct3D uygulamalarında, iletiler IDirect3DDevice9::Reset veya IDirect3D9::CreateDevice (veya IDirect3DDevice9son Sürümü) olarak adlandırılan ve görüntüleme modu değişikliğine neden olabilecek aynı iş parçacığı olmayan pencere yordamı iş parçacığına alınır. Direct3D çalışma süresi, birkaç kritik bölümü dahili olarak tutar. Bu kritik bölümlerden en az biri IDirect3DDevice9::Reset veya IDirect3D9::CreateDevicenedeniyle mod anahtarında tutulduğundan, uygulama mod değişikliğiyle ilgili pencere iletilerini aldığında bu kritik bölümler hala tutulur.

Bu tasarımın çok iş parçacıklı uygulamalar üzerinde bazı etkileri vardır. Özellikle, bir uygulamanın pencere iletisi işleme iş parçacıklarını Direct3D iş parçacıklarından güçlü bir şekilde ayırması gerekir. Bir iş parçacığında mod değişikliğine neden olan ancak pencere yordamında farklı bir iş parçacığında Direct3D çağrıları yapan bir uygulama kilitlenme tehlikesiyle karşı karşıyadır.

Bu nedenlerle Direct3D, IDirect3DDevice9::Reset, IDirect3D9::CreateDevice, IDirect3DDevice9::TestCooperativeLevelveya IDirect3DDevice9son sürümü, yalnızca pencere iletilerini işleyen aynı iş parçacığından çağrılabilir.

Programlama İpuçları