Thread Methods & Proprties & Attributes - نسخة قابلة للطباعة +- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb) +-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182) +--- قسم : قسم مقالات VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=184) +--- الموضوع : Thread Methods & Proprties & Attributes (/showthread.php?tid=4738) |
Thread Methods & Proprties & Attributes - RaggiTech - 01-10-12 كاتب الموضوع : !!! BoriS !!!
تكملة لهذا الموضوعhttp://vb4arb.com/vb/showthread.php?726 سنبدأ على بركة الله بطرق وخصائص ال Thread . تحتوى الفئة Thread على خصائص وطرق هامة عند التعامل مع مسار تنفيذى Thread . نقوم باستيراد مجال الاسماء كود : [color=#000000][COLOR=#0000bb]Imports System[/color][color=#007700].[/color][COLOR=#0000bb]Threading الطريقة Start كما هو واضح من اسمها انها تقوم بتشغيل مسار التنفيذ والطريقة Abort تقوم بايقافة كود : [color=#000000][COLOR=#0000bb]Sub Boris[/color][COLOR=#007700]() المثال السابق هو عبارة عن اجراء يقوم باستخدام المسار الحالى للبرنامج ( لم ننشى مسار تنفيذى جديد) وذلك عن طريقة الطريقة CurrentThread. المسار الحالى تم تشغيلة من طرف VB.NET الا اننا قمنا بايقافة بالطريقة Abort عندما وصلت قيمة الحلقة التكرارية الى 5 . ثم نفذنا الشرط كود : [color=#000000][COLOR=#0000bb] MessageBox[/color][color=#007700].[/color][color=#0000bb]Show[/color][color=#007700]([/color][color=#dd0000]"#"[/color][color=#0000bb]c[/color][COLOR=#007700]) ال C المرافقة لل Special Character (#) لتحوبلة الى Optimization >>> Char مثل الطريقة Start للتشغيل و Abort للايقاف ( بشكل نهائى ) لدينا الطريقتين Suspend و Resume الطريقة Suspend تقوم بايقاف المسار الحالى مؤقتـــا وبالتالى Resume لتشغيل المسار. للتاكد من كلامى انظر الكود الاتى كود : [color=#000000][COLOR=#0000bb]Sub BorisSuspendResume[/color][COLOR=#007700]() يتضح لنا من الكود السابق ان Suspend قامت بايقاف مسار التنفيذ دون قتلة او ايقاف نهائيا وذلك من خلال الرسالة التى استخدمنا بها الطريقة IsAlive والتى تعود ب True او False لاظهار حالة المسار الحالى. كود : [color=#000000][COLOR=#007700]Private [/color][color=#0000bb]Sub Form1_Load[/color][color=#007700]([/color][color=#0000bb]ByVal sender [/color][color=#007700]As [/color][color=#0000bb]Object[/color][color=#007700], [/color][color=#0000bb]ByVal e [/color][color=#007700]As [/color][color=#0000bb]System[/color][color=#007700].[/color][color=#0000bb]EventArgs[/color][color=#007700]) [/color][color=#0000bb]Handles Me[/color][color=#007700].[/color][COLOR=#0000bb]Load الطريقة Sleep تقوم بايقاف مسار التنفيذ ولكن لفترة زمنية معينة . كود : [color=#000000][COLOR=#007700][[/color][color=#0000bb]left[/color][color=#007700]][/color][color=#0000bb]Thread[/color][color=#007700].[/color][color=#0000bb]CurrentThread[/color][color=#007700].[/color][color=#0000bb]Sleep[/color][color=#007700]([/color][color=#0000bb]100[/color][color=#007700]) [/color][color=#0000bb]لمدة ثانيـــــة واحدة[/color][color=#007700].[/[/color][color=#0000bb]left[/color][COLOR=#007700]] الطريقة Join تقوم بايقاف عمل مسار التنفيذ الحالى حتى ينتهى مسار اخر من عملية التنفيذ اى عند Abort. وليس Suspend. الخاصية ThreadState تمنكك من معرفة حالة المسار الحالى. MessageBox.Show(BorisThread.ThreadState.ToString) وهى تحتوى على طرق يمكن استخدمها والاستعلام عنها بواسطة If مثلا. Data Sharing : مشاركة البيانـــان ( الله يكفينا شـــرها ) .... كما ذكرت سابقا فى المقال السابق انواع ال Threads .. Free Threads - Apartment Threads مسارات التنفيذ الحرة تستطيع مشاركة البيانات فيما بينها ليس هذا فحسب بل تصل بها الجرائة والوقاحة للمشاركة حتى فى مصــادر النظام System Resources او حتى ال Hardewares كود : [color=#000000][COLOR=#007700][[/color][color=#0000bb]left[/color][COLOR=#007700]] المثال مشروح بالمقال السابق. فمن البديهى ايجاد حل لهذه المعانة التى ستصل بك فى النهائية للتخلى عن مسارات التنفيذ . اليك الحل أخى وهـــو مايعرف باســـم التزامــن Synchronization. SyncLockEnd SyncLock Structure ... يحتاج متغير من النوع reference عند التصريح. التركيب SyncLock تركيب رائع جدا بحيث يقصر تشغيل الاكواد الموجودة بين ضلعية على مسار تنفيذى واحد حتى لو وجد 100 مسار تنفيذى اخر.. كود : [color=#000000][COLOR=#007700][[/color][color=#0000bb]left[/color][COLOR=#007700]] الكود السابق سينفذ من طرف مسار واحد فقط رغمــا عن أنف الجميـــع.... اليك أيضا مواصفة من مواصفات أخرى تقوم بعمل التركيب السابق الا انها تتيح لك عدم اعادة التركيب السابق فى كل Sub تريد تنفيذه من قبل مسار تنفيذى واحد . كود : [color=#000000][COLOR=#007700][[/color][color=#0000bb]left[/color][color=#007700]]<[/color][color=#0000bb]System[/color][color=#007700].[/color][color=#0000bb]Runtime[/color][color=#007700].[/color][color=#0000bb]Remoting[/color][color=#007700].[/color][color=#0000bb]Contexts[/color][color=#007700].[/color][color=#0000bb]Synchronization[/color][color=#007700]()> [/color][color=#0000bb]_[/color][color=#007700][/[/color][color=#0000bb]left[/color][COLOR=#007700]] اكتبها كما هى فى اول ال Class . عليك العلم أخى ان عند استخدامك للمواصفة Synchronization او التركيب SyncLock فلاداعى اصلا الى استخدام ال Multi Threads لانك قمت بالتعامل مع Thread واحد فقط أذن اليك الحــل MethodImpl Attribute. المواصفة MethodImpl تمكنك من تحديد ال Memebers الخاصة بك التى تود تنفيذهــا من قبل مسار تنفيذى واحــد . كود : [color=#000000][COLOR=#007700]Class [/color][COLOR=#0000bb]Boris وللحديث بقية ان شاء الله. |