سؤال

لقد كتبت فئة C ++ التي أحتاج إلى مشاركة مثيل بين عمليين Windows على الأقل. ما هي الطرق المختلفة للقيام بذلك؟

في البداية نظرت إلى # pragma data_seg. فقط أن تكون بخيبة أمل عندما أدركت أنها لن تعمل على الفصول أو بأي شيء يخصص على كومة الكومة.

يجب أن يكون مثيل الفصل متاحا عبر DLL لأن التطبيقات الحالية الكاملة تستخدم بالفعل هذا DLL.

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

المحلول

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

نصائح أخرى

تفحص دفعة :: Informocess.. وبعد يستغرق التعود قليلا، لكنه يعمل بشكل جيد للغاية. لقد قدمت هياكل بيانات معقدة نسبيا في الذاكرة المشتركة التي عملت بشكل جيد بين العمليات.

تحرير: يعمل مع ملفات المعينة في الذاكرة أيضا. النقطة هي أنه يمكنك استخدام البيانات بطريقة منظمة؛ ليس لديك لعلاج كتل الذاكرة (في الملفات أو الذاكرة المشتركة) كبيانات خامة فقط عليك أن تقرأ / الكتابة بعناية للمغادرة في حالة صالحة. Boost :: Interprocess يعتني بهذا الجزء ويمكنك استخدام حاويات STL مثل الأشجار، قوائم، إلخ.

يمكنك استخدام التنسيب الجديد لإنشاء الكائن في منطقة ذاكرة مشتركة. طالما أن الكائن لا يستخدم أي مؤشرات، فسيكون ذلك جيدا.

هل هو جراب أو هل تحتاج إلى أن تكون قادرا على مشاركة مثيل واحد عبر العمليات؟ هل فكرت في استخدام نمط Singleton (إصدار التهيئة الثابتة لأسباب تتعلق بسلامة الخيط)؟ ستحتاج إلى استخدام Mutexes أيضا لحماية الكتب المتزامنة والأشياء.

على Windows، يمكنك استخدام COM أيضا.

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