You are on page 1of 28

Object Oriented Programming II

‫ا لبرمجة ا لش يئية‬

C# . NET
Visual Studio.NET

1
‫المحاضرة الثامنة‬
‫المسارات المتعددة‬
‫‪MultiThreading‬‬

‫‪2‬‬
‫مفهوم تعدد المهام ‪Multithreading‬‬
‫‪‬عندما استخدم الهاتف أو الحاسوب ستالحظ أنه يمكن تشغيل عدة برامج‬
‫مع بعض في وقت واحد‪ ,‬كل برنامج يعمل في الذاكرة يعتبر‪ Process ‬‬
‫فمثالً إذا قم ت بتشغي ل خمس ة برام ج م ع بع ض فهذا يعن ي أ ن نظام‬
‫التشغيل ينظم عمل خمسة‪  Processes ‬مع بعض‪.‬‬
‫‪‬آلية تشغيل عدة برامج مع بعض تسمى‪Multiprocessing ‬‬
‫‪‬من جهة اخرى‪ ,‬في البرنامج الواحد يمكنك تنفيذ عدة أوامر مع بعض و‬
‫جعل المستخدم يشعر كأنها تتنفذ في وقت واحد‪.‬‬
‫‪ ‬فمثالً ف ي حال كن ت تلع ب لعب ة مث ل لعب ة كرة القدم‪ ،‬تج د أن ه هناك عدة‬
‫أشياء تحدث في وقت واحد‪ ،‬فمثالُ عند تشغيل اللعبة تسمع عدة أصوات‬
‫( مثل أغنية حماسية‪ ،‬صوت المعلق‪ ،‬صوت المشجعين‪ ،‬صوت صفارة‬
‫الحكم في حال وقع خطأ إلخ‪. ) ..‬‬
‫‪‬باإلضاف ة إل ى أن ه يمكن ك تحري ك الالع ب و مشاهدة توقي ت المباراة و‬
‫الكثير من التفاصيل األخرى التي تحدث كلها في نفس الوقت لتصنع لك‬
‫لعبة رائعة‪.‬‬
‫‪‬هذه اآللية تسمى تعدد المهام‪ ) ) Multithreading  ‬ألن كل جزء‬
‫يعم ل ف ي ال برنامج يكون عبارة ع ن مجموع ة أوام ر موضوع ة بداخ ل‬
‫‪ ) ) Thread‬خاص‪.‬‬
‫‪‬إذاً نس تخدم آلي ة تعدد المهام لجع ل ال برنامج قادر عل ى تنفي ذ عدة أوام ر‬
‫مع بعض و كأنها تتنفذ في وقت واحد‬
‫أهمية تعدد المهام‬
‫‪‬تجعل المستخدم قادر على تنفيذ عدة عمليات مع بعض في نفس الوقت‪.‬‬

‫‪‬جعل تصميم التطبيقات أجمل و إضافة مؤثرات فيه‪.‬‬


‫‪‬ك ل ‪ Thread‬تقوم بتشغيل ه‪ ,‬يعم ل بشك ل منعزل ع ن باق ي األوام ر‬
‫الموجودة ف ي ال برنامج‪ ,‬و بالتال ي فإن ه ف ي حال وقوع أ ي خط أ ف ي الـ‬
‫‪ Thread‬فإنه لن يؤثر على باقي األوامر الموجود في البرنامج‪ ,‬كما أنه‬
‫ال يؤثر على أي ‪ Thread‬آخر شغال في البرنامج‪.‬‬
‫‪System.Threading.Thread‬‬
‫‪‬وهي الفئة االساسية في مجال االسماء هذا ‪ ،‬تتيح لنا انشاء ‪ threads‬وتنفيذ‬
‫المهام المختلفة عليها ‪ ،‬مكونات هذه الفئة االساسية هي‪:‬‬
System.Threading.Thread
‫االولوية ‪Priority‬‬
‫‪‬لتحديد ‪ Priority‬أي مهمة نستخدم الـ ‪ enum‬التالي‪:‬‬
‫‪ParameterizedThreadStart‬‬
‫‪‬يتم تنفيذ دالة‪ Start ( ) 4‬مرات مختلفة على سالسل منفصلة ‪ .‬باستخدام‬
‫‪ ParameterizedThreadStart‬و يمكن تمرير اسم دالة كوسيط‪.‬‬
‫‪‬مالحظ ة‪ :‬يت م اس تدعاء المس ارات (‪)Thread‬بترتي ب غي ر تس لسلي‪ .‬فهناك‬
‫توقف مؤقت قبل أن يتمكن وقت التشغيل من تلقي سلسلة رسائل‪.‬‬

‫‪ ‬لذل ك ال يمك ن االعتماد عل ى ترتي ب التنفي ذ هن ا بالضبط‪ .‬فق د يس تغرق‬


‫المسار(‪ ) Thread‬وقتًا أطول ألسباب خارجة عن إرادة المبرمج‪.‬‬
‫‪Threads Synchronization‬‬
‫‪‬عندما تعمل مع الـ ‪Threads‬ال أحد يضمن أال يحصل تداخل بين مسارات‬
‫عمل ك المختلف ة لذا ت م ايجاد م ا يعرف ‪ SyncLock‬والذي يطب ق مبادئ‬
‫التزامن ‪.‬‬

You might also like