ربما يكون السؤال مقتضب ولكنى اريد ان اعرف ما الفرق بين Thread و DoEvents
ومتى استخدم الأولى ومتى استخدم الثانية؟
ربما يكون السؤال مقتضب ولكنى اريد ان اعرف ما الفرق بين Thread و DoEvents
ومتى استخدم الأولى ومتى استخدم الثانية؟

اقتباسما الفرق بين Thread و DoEvents
DoEvents:(تعليمة) توقف تشغيل سلسلة عمليات ما وتقوم بالاستجابة للاحداث التي تم إثارتها ثم تعود إلى السلسلة.
Thrade:(فئة) رتل جديد من التعليمات يعمل بشكل مستقل عن الرتل الأساسي.
على حد علمي والعلم لله أن Doevents كانت موجودة في vb6 للتغلب على المشكلة الكامنة في كون الـ vb6 لا تقبل تعدد الأرتال وهذا يهني .. عند الدخول في عمليات طويلة من التكرارات أو غيرها من الأوامر التي تتطلب وقتاً طويلاً لإنجازها أن البرنامج سيتوقف عن الاستجابة حتى ينهي سلسلة العمليات يعني لا إلغاء الأمر ولا إغلاق البرنامج يمكن أن يفيد في مثل هذه الحالة .. فماذا إذا كانت هذه العملية تستغرق ساعات أو أيام .. لهذا كانت الحاجة إلى هذه التعليمة لكي تقطع عمل هذه السلسلة وتتيح أمام المستخدم عمل بعض الأمور قبل العودة إلى السلسلة أو حتى إنهاء السلسلة.
أما في vb.net فقد أصبحت اللغة تدعم تعدد الأرتال بشكل كامل وأصبح بإمكانك إنشاء أو إيقاف أي رتل بأي وقت من الأوقات فانتفت الحاجة إلى DoEvents.
اقتباسومتى استخدم الأولى ومتى استخدم الثانية؟
لا أدري فيما إذا كانت DoEvents مازالت مدعومة في دوت نت ولكن كما قلت على كل الأحوال لم يعد لها حاجة لذلك:
- إذا كنت تعمل على vb6 استخدم DoEvents
- إذا كنت تعمل على vb.net استخدم تعدد الأرتال
:D :D
بالتوفيق
يا ريت الاخ الكريم يوضح لنا ما يقصده بالظبط و يعنى ايه (الارتال)
DoEvents
تمكن النظام من تنفيذ عمليات وأحداث النظام عند قيام برنامجك بعملية طويلة مثلا حلقة تكرارية تنفذ عدد كبير من العمليات و نستخدم خلالها الأمر DoEvents لتنفيذ باقي أحداث النظام أثناء تكرار هذه العملية
و وصف التعليمة في مكتبة MSDN
اقتباسProcesses all Windows messages currently in the message queue.
أي تنفذ جميع رسائل النوافذ الموجودة في طابور النوافذ
ونعم هي مدعومة في الفريموورك 2
مثال
Private Sub TestDoEvents() For i As Integer = 0 To 10000 TextBox1.Text = i.ToString My.Application.DoEvents() Next End Sub
تم تعديل هذه المشاركة بواسطة samerselo في 21 مايو 2006 في 23:46
عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه
نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا
ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا
محمد سامر أبو سلو
بالنسبة للـ Thread أو مسار التنفيذ
أنت عندما تقوم بتنفيذ مجموعة أوامر ضمن إجراء برمجي ما ستلاحظ أن بعضها يأخذ وقتا طويلا و قد يتسبب ذلك في إحساس مستخدم البرنامج أن البرنامج لايستجيب أو عندما تقوم بالقراءة من منفذ تسلسلي مثلا فبرنامجك عندها سيتوقف عن الاستجابة حتى تتم عملية القراءة من المنفذ التسلسلي عندها نقوم بنقل هذه العمليات التي تأخذ وقتا طويلا إلى مسار تنفيذ Thread فرعي يقوم بتنفيذ المهمة بالخلفية بينما يبقى المسار الرئيسي لبرنامج متوفرا للقيام بعمليات أخرى في نفس الوقت الذي يتم تنفيذ العمليات الطويلة أو التي قد تسبب توقف المسار عن الاستجابة في مسار فرعي مستقل
وأقتبس من كتاب الاستاذ محمد حمدي غانم السطور التالية
اقتباسالفكرة كالتالي: إنّ الويندوز يقسّم البرامج إلى مجموعات من العمليّات Processes، كلّ عمليّة منها لها رقمها وموقعها في الذاكرة وقيم متغيّراتها الخاصّة بها، ولها أولويّة في التنفيذ Priority.. وكلّ ما يحدث، هو أن يتمّ تقسيم وقت التنفيذ بين هذه العمليّات بما يتناسب مع أولويّة كلّ عمليّة.. فالعمليّة الأكثر أولويّة تأخذ جزءا أكبر من الوقت لتنفيذها.. فإذا انتهى جزء الوقت الخاصّ بها، انتقل التنفيذ لجزء آخر من عمليّة أخرى، ثمّ أخرى، حتّى آخر عمليّة.. بعد هذا يعود الكمبيوتر ليواصل تنفيذ جزء آخر من أوّل عمليّة، فالثانية فالثالثة وهكذا، حتّى يتمّ الانتهاء من هذه العمليّات جميعا.وطبعا لا تشعر أنت بأيّ من هذا، فالوقت المخصّص لتجزئة العمليّات هو أجزاء ضئيلة من الثانية.
ليس هذا فحسب.. بل يمكن تقسيم كلّ عمليّة Process إلى عمليّات فرعيّة Threads، بحيث يمكن أن ينفّذ البرنامج أكثر من مهمّة في نفس الوقت.
وسيتساءل مبرمج VB: جميل.. ولكن ما دخلي أنا بكلّ هذا؟.. كلّ ما عليّ فعله هو كتابة برنامجي، وعلى نظام التشغيل أن يفعل عند تنفيذه ما حلا له.
معك حقّ، وهذا هو الوضع في معظم البرامج التي ستكتبها.. ولكنّ الجديد هنا، هو أنّ VB.Net يمنحك القدرة على تقسيم برنامجك نفسه إلى عمليّات فرعيّة Threads.. إنّ هذا معناه أن مستخدم برنامجك يمكنك أن ينفّذ أكثر من عمليّة معا في نفس الوقت.
ما زلت تشعر بعدم أهمّيّة ما أقول؟
حسنا.. افترض أنّك كتبت برنامجا ينفّذ عمليّة طويلة، مثل ضغط ملفّ كبير الحجم مثلا.. في هذه الحالة سيكون على مستخدم برنامجك أن يضع يده على خدّه، وينتظر حتّى تنتهي هذه العمليّة، دونَ أن يستطيع أن يفعل أيّ شيءٍ آخر ببرنامجك.. هنا تأتي فائدة تعدّد العمليّات Multithreading، فلو جعلت ضغط الملفّ عملية فرعيّة (بالأولويّة التي تريدها)، فسيتمّ إجراؤها في خلفيّة البرنامج، بينما سيكون بإمكان المستخدم في هذه الحالة أن يواصل استخدام برنامجك، فيقوم بعرض ملفّات أخرى وقراءتها أو تحريرها.. إلخ.. وعندما تنتهي عمليّة ضغط الملفّ، سيتمّ إخبار برنامجك بذلك، لتعرض للمستخدم أيّ رسالة تفيد بانتهاء العمليّة.
أما عن متى نستخدم DoEvents أو نقل العملية لمسار تنفيذ آخر Another Thread فأعتقد هذا يتوقف على طيبعة الكود والبرنامج وحتى خبرة المبرمج ذات نفسه
تم تعديل هذه المشاركة بواسطة samerselo في 21 مايو 2006 في 23:43
عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه
نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا
ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا
محمد سامر أبو سلو
m_3ryan كتب:يا ريت الاخ الكريم يوضح لنا ما يقصده بالظبط و يعنى ايه (الارتال)
أعتقد أن الأخ samerselo قد أوفى بالشرح وآسف لأنني لم أكن موجود عند وضع المشاركة ولكن كما قلت الأخ samerselo كفى ووفى
اقتباسبارك الله فيكم جميعا
وفيك أخي الكريم
هذا الموضوع مغلق.