سؤال

ولدي مكون COM تراث، ومهمتي هي أن يكتب خدمة الإنترنت التي التفاف COM وتمكين المكالمات غير مؤمن المتزامنة.

وأولا وقبل كل شيء، لأن الكائن COM نفسه عديم الجنسية، قررت أن استخدام [ThreadStatic] سمة لذلك كل موضوع سوف يكون المثال الخاص للكائن COM لمنع استخدام قفل {} بيان وتمكين معالجة المتزامنة الحقيقي ، ولكن يبدو أن جميع المكالمات لا يزال procceeded متزامن.

وكتبت رمز الاختبار الذي يدير طريقة من متزامن مكون COM مع ل{} حلقة، ثم أضاف موضوع الثاني الذي يفعل بالضبط نفس الشيء ولكن إلى مثيل آخر من وجوه COM، ورأيت أي تغييرات، والمكالمات X تستهلك دائما Y زمنية، بغض النظر عن المواضيع عد. انها مثل وجود قفل ثابت أو شيء من هذا ...

وعلى الرغم من ذلك، يمكن لعمليات منفصلة معالجة كل مكالمة واحدة في وقت واحد لريال مدريد. ما منع من المواضيع منفصلة على التصرف نفسه؟

وماذا يمكنني أن أفعل لتمكين مكالمات المتزامنة حقيقية لمكون COM؟

هل كانت مفيدة؟

المحلول

وCOM وخيوط علم وسيشرف طراز مؤشر الترابط التي coclass المطلوبة. وتنشر متطلبات الترابط مع قيمة ThreadingModel في التسجيل. إذا تم تعيين إلى "شقة" (أو مفقود)، وCOM التأكد من توفير كافة استدعاءات الأسلوب من شقة مترابطة واحد من خلال العودة وكيل الواجهات التي QI. الوكيل يضمن يتم تنظيم الدعوة إلى موضوع الصحيح.

هل يمكن الغش واستخدام مؤشر واجهة التي حصلت عند إنشاء coclass في موضوع STA وإجراء المكالمات دون التعبئة. وبالنظر إلى أن coclass قال بالفعل انه غير قادر على خيوط المعالجة المتعددة، وهذا هو المرجح جدا للعمل بشكل صحيح. عليك الحالة الداخلية فقط عشوائيا الفاسدة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top