الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

استفسار على ال Multithread

بدأه ibr_exn في 12 فبراير 2008 · 11 رد · 1,674 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

عملت مثال بسيط على ال MultiThreads

بحيث يتم تحريك ثلاثة اشكال مع بعض

المشكلة انه اذا ضغطت الزر الاول وانتظرت قليلا وضغطت احد الزرين الاخرين ستلاحظ ان الشكل الثاني او الثالث قفز فجاة الى مكان الشكل الاول المتحرك

لم اعرف ما السبب حيث انه مفروض يبدا من البدايه

مشكلة اخرى عند ايقاف الشكل المتحرك تظهر رسالة خطا

مرفق مثال يوضح المشكلة واعتقد ان الكود واضح ولا يحتاج الى شرح

ارجو ممن يعرف الاجابة الا يبخل علينا بها

MultiThread.rar

الحمد لله الذي هدانا لهذا وماكنا لنهتدي لولا ان هدانا الله

#2
اقتباس
لم اعرف ما السبب حيث انه مفروض يبدا من البدايه

السبب هو هذا

....
Form1.Shape2.Left:=Form1.Shape1.Left-10;
.....
Form1.Shape3.Left:=Form1.Shape1.Left-10;

كان المفروض

Form1.Shape2.Left:=Form1.Shape2.Left-10;
Form1.Shape3.Left:=Form1.Shape3.Left-10;

ثانيا

اقتباس
مشكلة اخرى عند ايقاف الشكل المتحرك تظهر رسالة خطا

اكيد ان الامر يتعلق بادارة غير جيدة لل Threads

وبشكل ادق

x.Suspend;

وايضا نسيت ان تخلق الThread في احد الازرار واظنه الاول

استعملته بدون خلق

اذا كنت تملك دلفي 7 انظر الى المثال في

\Borland\Delphi7\Demos\Threads

او هنا

Threads.rar

أضاعوني وأي فتى أضاعـوا * * * ليـوم كــريهـة وســـداد ثغــــر

وخـــــلونـي ومعتـرك المنايـا * * * وقد شـــرعوا أسنــتهم لنحـري

كأني لم أكــــــن فيهـم وسيطـا * * * ولم تك نســبتي في آل عمــرو

أجرر في الجـــوامع كـل يـوم * * * ألا لله مظــــلمتـي وهـصـــري

عسى الملك المجيب لمن دعاه * * * سينجيني فيعلم كيــف شكـري

فأجـــزي بالكرامـة أهـل ودي * * * وأجزي بالضـغينة أهل ضري

منتديات الرياضيات العربية

#3

المشكلة الأساسية هي أنك تعرف متغيرات محلية من نوع thread داخل الاحداث onclick

فمثلاً حين تستدعي Button1Click سيتم حجز متغير x من النوع IbrThread ثم يتم إنشاء ال thread ويتم إستدعاء excute ويتغير caption إلى 'Stop' وحين تضغط مرة أخرى على الـ Button1 سيكون لدينا thread جديدة لم يتم إنشاءها بعد وسيتم إستدعاء Suspend لشئ غير موجود ...

راجع المثال الذي وضعه الأخ romanof

راجع delphi Help وبالذات الجزء الخاص بـ Synchronize لأنك ستحتاجها ..

"First they ignore you, then they laugh at you, then they attack you, then you win"

===

اقتباس

حُكَّامُـنَا إِنْ تَصَـدّوا لِلْحِمَــى اقْتَحَمُـوا ***** وَإِنْ تَصَدَّى لَـهُ المُسْتَعْمِـرُ انْسَحَبُـوا

هُمْ يَفْرشـُونَ لِجَيْـشِ الغَــزْوِ أَعْيُنَـهُـمْ ***** وَيَدَّعُــونَ وُثُـوبَـاً قَـبْـلَ أَنْ يَثِـبُــوا

الحَاكِمُـونَ و«وَاشُنْـطُـنْ» حُكُومَتُـهُـمْ ***** وَاللامِعُــونَ وَمَـا شَعَّـوا وَلا غَرَبُــوا

القَاتِلُـــونَ نُبُــوغَ الشَّـعْــبِ تَرْضِـيَـــةً ***** لِلْمُعْتَدِيــنَ وَمَـا أَجْـدَتْـهُـمُ الـقُــرَبُ

لَهُمْ شُمُـوخُ «المُثَنَّـى» ظَاهِـرَاً وَلَهُـمْ ***** هَـوَىً إِلَـى بَابَـك الخَرْمِـيّ يُنْتَسَـبُ

البردوني "أبو تمام وعروبة اليوم" 1971

===

اقتباس
عبيد الهوى يحكمون البـلاد ***** ويحكمهــم كلّهـــم درهــــــم

و تقتـادهـم شهـوة لا تنــام ***** وهـــم فـي جـهالتهــم نــــوّم

ففــي كـــلّ ناحيــة ظـالـــم ***** غبــــــيّ يسـلـّطــــه أظلـــم

أيا من شبعتم على جوعــنا ***** وجـــوع بنينـا ألـم تتخمـــوا ؟

ألم تفهموا غضبة الكادحين ***** على الظلـم ؟ لا بدّ أن تفهموا

البردوني "نحن و الحاكمون "

#4

صحيح يا cipher كان لازم يستخدم متغيرات عامة او متغيرات داخل الكلاس الخاص بالفورم

وكان المفروض قبل الخلق يتاكد من وجود thread خاص بالمتغير

قبل الخلق

انظر الى هذا الرابط

Delphi6 Developers Guide

الفصل الخاس

ستتجده هنا

في هذه الصفحة من العرب تيم

أضاعوني وأي فتى أضاعـوا * * * ليـوم كــريهـة وســـداد ثغــــر

وخـــــلونـي ومعتـرك المنايـا * * * وقد شـــرعوا أسنــتهم لنحـري

كأني لم أكــــــن فيهـم وسيطـا * * * ولم تك نســبتي في آل عمــرو

أجرر في الجـــوامع كـل يـوم * * * ألا لله مظــــلمتـي وهـصـــري

عسى الملك المجيب لمن دعاه * * * سينجيني فيعلم كيــف شكـري

فأجـــزي بالكرامـة أهـل ودي * * * وأجزي بالضـغينة أهل ضري

منتديات الرياضيات العربية

#5

جميل جدا وجدت هذا الكتاب وهو نفس الموقع الموجود في الرابط الاول من المشاركة السابقة

Delphi_Threads.rar

أضاعوني وأي فتى أضاعـوا * * * ليـوم كــريهـة وســـداد ثغــــر

وخـــــلونـي ومعتـرك المنايـا * * * وقد شـــرعوا أسنــتهم لنحـري

كأني لم أكــــــن فيهـم وسيطـا * * * ولم تك نســبتي في آل عمــرو

أجرر في الجـــوامع كـل يـوم * * * ألا لله مظــــلمتـي وهـصـــري

عسى الملك المجيب لمن دعاه * * * سينجيني فيعلم كيــف شكـري

فأجـــزي بالكرامـة أهـل ودي * * * وأجزي بالضـغينة أهل ضري

منتديات الرياضيات العربية

#6

ما شاء الله عليكم

في الحقيقة الخطأ الاول كان فعلا خطأ سخيف مني وقد تنبهت له وعدلته

"خلق الانسان عجولا"

بالنسبة للخطأ الثاني ساجرب ملاحظاتكم و ساقرا المراجع المذكوره ان شاء الله

الف شكر اخواني

الحمد لله الذي هدانا لهذا وماكنا لنهتدي لولا ان هدانا الله

#7

تم تعديل المثال السابق

كما تم اضافة مثال اخر على التزامنsyncronization باستخدام الThreads

الف شكر لكل من شارك

Threadsok.rar

Synchronization.rar

الحمد لله الذي هدانا لهذا وماكنا لنهتدي لولا ان هدانا الله

#8

تم اضافة مثال اخر حاولت فيه اقارن بين استخدام الthreads و تاثيره على سرعة تنفيذ البرنامج

اللي حينفذه حيلاحظ الفرق الكبير في الوقت في الحالتين

Threads3.rar

الحمد لله الذي هدانا لهذا وماكنا لنهتدي لولا ان هدانا الله

#9

طيب سؤال :

في حالة انشاءcreate اكثر من thread من نفس الclass لماذا يتم التحكم ( اقصد هنا suspend and resume)فقط باخر واحد ولا يتم التحكم بالبقية .

؟؟؟

الحمد لله الذي هدانا لهذا وماكنا لنهتدي لولا ان هدانا الله

#10

لانك تستخدم متغير واحد وبالتالي لن تستطيع التحكم الا بالذاكرة المحجوزة للاخير ولكن لو انك

انشات مصفوفة وكلما انشات واحد وضعته داخل المصفوفة لامكنك ان تراقب الوضع عن كثب

أضاعوني وأي فتى أضاعـوا * * * ليـوم كــريهـة وســـداد ثغــــر

وخـــــلونـي ومعتـرك المنايـا * * * وقد شـــرعوا أسنــتهم لنحـري

كأني لم أكــــــن فيهـم وسيطـا * * * ولم تك نســبتي في آل عمــرو

أجرر في الجـــوامع كـل يـوم * * * ألا لله مظــــلمتـي وهـصـــري

عسى الملك المجيب لمن دعاه * * * سينجيني فيعلم كيــف شكـري

فأجـــزي بالكرامـة أهـل ودي * * * وأجزي بالضـغينة أهل ضري

منتديات الرياضيات العربية

#11

اخ عادل ممكن توضح بمثال او تعدل على المثال الموجود

شاكر لك جدا

الحمد لله الذي هدانا لهذا وماكنا لنهتدي لولا ان هدانا الله

#12

اتمني ان يكون هذا ما طلبت :) .

MultiThread.rar

الإنسان الذي يقول بأنه لا يمكن عمل شيء يجب ألا يعيق مطلقاً الإنسان الذي يقوم بعمل ذلك الشيء.

إن تخطئ فأنت إنسان ... أما أن تلوم جهازك الكمبيوتر على خطأك فهذا أكثر إنسانية.

مواضيع مشابهة