متعدد العمليات التلميحات البرمجية

تتطلب التطبيقات متعددة العمليات عناية أكثر صرامة من التطبيقات ذات مؤشر الترابط الواحد عند الوصول إلى البيانات. بسبب وجود مسارات مستقلة متعددة للتنفيذ، قيد الاستخدام فى وقت واحد في التطبيقات متعددة العمليات, سواء الخوارزميات أو البيانات أو كلاهما، يجب أن تدرك أن البيانات يمكن استخدامها بواسطة مؤشر ترابط واحد أو أكثر في كل مرة. يشرح هذا الموضوع أساليب تجنب المشاكل المحتملة أثناء برمجة تطبيقات متعددة العمليات بواسطة Microsoft Foundation Class (MFC) library.

  • الوصول إلى كائنات من مؤشرات ترابط متعددة

  • الوصول إلى كائنات MFC من مؤشرات ترابط ليست MFC

  • مخططات مؤشر WIndows

  • الاتصال بين مؤشرات الترابط

الوصول إلى كائنات من مؤشرات ترابط متعددة

لأسباب تتعلق بالحجم و الأداء، كائنات MFC ليست آمنة من جهة "مؤشرات الترابط" على مستوى الكائن، و إنما على مستوى الفئة فقط هذا يعني أنه يمكن أن يكون هناك مؤشرا ترابط منفصلان لمعالجة كائني CString مختلفين، ولكن ليس مؤشرا ترابط لمعالجة نفس الكائن CString . إذا كنت مضطرا أن يكون عندك مؤشري ترابط لمعالجة نفس الكائن، يجب عليك حماية مثل هذا الوصول بآليات مزامنة Win32 المناسبة مثل المقاطع الحرجة (critical sections). للحصول على مزيد من المعلومات حول المقاطع الحرجة و الكائنات الأخرى ذات العلاقة، راجع التزامن في Windows SDK.

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

الوصول إلى كائنات MFC من مؤشرات ترابط ليست MFC

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

مخططات مؤشر WIndows

كقاعدة عامة, يمكن لمؤشر ترابط الوصول فقط إلي كائنات MFC التى أنشأها . وهذا لأن مخططات مؤشر Windows المؤقتة و الدائمة يتم الاحتفاظ بها في التخزين المحلي لمؤشر ترابط للمساعدة في المحافظة على الحماية من الوصول المتزامن من خلال مؤشرات الترابط المتعددة. على سبيل المثال، مؤشر ترابط العامل لا يمكنه إنجاز عملية حسابية ثم استدعاء دالة العضو UpdateAllViews الخاصة بالمستند للحصول على النوافذ التي تحتوي على طرق عرض البيانات الجديدة المعدلة. هذا ليس له أي تأثير , لأن المخطط من كائنات CWnd إلى HWND هو محلي بالنسبة لمؤشر الترابط الأساسي. وهذا يعني أن مؤشر ترابط واحد قد يكون له تعيين من مؤشر Windows إلى كائن C++، و لكن مؤشر ترابط آخر قد يعين ذلك المؤشر نفسه إلى كائن C++ مختلف. التغييرات التي تم إجراؤها في أحد مؤشرات الترابط لا ينعكس في الآخر.

هناك العديد من الطرق حول هذه المشكلة. الأول هو تمرير مؤشرات فردية (مثل HWND) بدلاً من كائنات C++ إلى مؤشر ترابط العامل. يضيف مؤشر ترابط العامل بعد ذلك هذه الكائنات إلى المخطط المؤقت الخاص به عن طريق استدعاء دالة عضو FromHandle المناسبة. يمكنك أيضاً إضافة الكائن إلى مخطط مؤشر ترابط دائم عن طريق استدعاء Attach(إرفاق) و لكن يجب القيام بهذا فقط إذا كنت تضمن أن الكائن سيبقى موجوداً أطول من مؤشر الترابط

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

للحصول على معلومات حول مخططات المؤشر، راجع الملاحظة الفنية 3. للحصول على المزيد من المعلومات حول التخزين المحلي لمؤشر الترابط, راجع التخزين المحلي لمؤشر الترابط و استخدام التخزين المحلى لمؤشر الترابط في Windows SDK.

الاتصال بين مؤشرات الترابط

يوفر MFC عدداً من الفئات التي تسمح لمؤشرات الترابط بمزامنة الوصول إلى الكائنات للمحافظة على أمان مؤشر الترابط استخدام هذه الفئات موضح في تعدد العمليات: كيفية استخدام فئات المزامنة و تعدد العمليات: متى يتم استخدام فئات التزامن للحصول على المزيد من المعلومات حول هذه الكائنات، راجع التزامن في Windows SDK.

راجع أيضًا:

المبادئ

تعدد العمليات بـ ++C و MFC