![]() |
|
دلفي & threads مفاهيم و تطبيقات . - نسخة قابلة للطباعة +- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum) +-- قسم : منتديات دلفي التقنية (https://delphi4arab.net/forum/forumdisplay.php?fid=6) +--- قسم : دلفي والتعامل مع النظام و الذاكرة (https://delphi4arab.net/forum/forumdisplay.php?fid=20) +--- الموضوع : دلفي & threads مفاهيم و تطبيقات . (/showthread.php?tid=1773) الصفحات:
1
2
|
دلفي & threads مفاهيم و تطبيقات . - mohfa - 12-03-2010 السلام عليكم ورحمة الله وبركاته . يمكن تفادي Synchronization باستعمال ال PostMessage و SendMessage و هنا سوف يتدخل النظام و يصبح هو المتحكم في عمليات ال In/Out لل Thread و هو احسن شئ يمكن استعماله مع ال Thread و هذا سيكون بتعامل مع LPARAM و WPARAM . انا متاكد ان اخي TF6M سوف يتطرق لها في بقية الدرس ان شاء الله و هو مشكور على هذا . دلفي & threads مفاهيم و تطبيقات . - TF6M - 14-03-2010 بسم الله الرحمان الرحيم
- لإنشاء thread توفر دلفي صنف TThread لتحقيق ذلك , دون اللجوء الى WinApi , تعرض عدة خصائص
لتسهيل التعامل مع الـ Thread , تتمثل في :
Create/Destroy: كـ Constructor /Destructor .
Execute: يحتوى على الكود الذي سينفذه الثريد , كما يجب التحقق بصفة دورية الخاصية Terminted , لأنه في حالة إقاف عمل الثريد
بواسطة الخاصية Terminate , يجب علينا إيقاف التنفيذ أو معالجة الكود الذي تنفذه الخاصية Execute .
Synchronize: هذه الخاصية لها باراماتر وحيد , يحتوي على إسم إجراء/دالة معرفة في وحدة البرنامج , تستخدم لتجنب
التداخلات التي يمكن أن تحدث في حال وجود أكثر من thread شغال في آن واحد , أو عدة إجراءات/دوال من VCLs كلها تتعامل
مع متغيرات عامة , قابلة للتغير من أي قسم من أقسام البرنامج .
- في حالة إستخدامنا لأكثر من Synchronize ستكون نسبة تعرضنا لحالة توقف تام للبرنامج كبيرة جدا .
- الجدول التالي يوضح فكرة التداخل في حالة أكثر من ثريد شغال يستخدمان نفس المصادر (متغيرات عامة) :
![]() - يجب أن يكون هناك تزامن في تنفيذ التعليمات بين الثريد X,Y و إلا سيحدث تداخل أثناء معالجة تعليمات كليهما , مثلا التعليمة رقم 3
للثريد X تقوم بفتح الملف F للقراءة فقط , و التعليمة رقم 2 للثريد Y تقوم بالكتابة في F , هناك طرق لتفادي هذه المشكلة كإستخدام الصنف
TCriticalSection الذي يمنع الولوج لقسم معين من الكود (الدي نريد حمايته) و حجبه عن الـ Threads الأخرى ,
أيضا هناك دوال Apiتقوم بنفس الدور (InitializeCriticalSection, LeaveCriticalSection...إلخ) .
WaitFor: لعمل الـ Switch بين threads , مثال لدينا ثريد X و ثريد Y , X ينتظر الـ WaitFor الخاصة بـ Y ليبدأ العمل و هكذا ,
يجب مراعات الـ Synchronize الخاصة بـ X&Y , لانه أي خلل منطقي سيوقف البرنامج حالا ,
البديل بإستعمال دوال Api بما يسمى بـ Wait Functions كـ (WaitForSingleObject, WaitForMultipleObjects ....إلخ) .
Terminate/Suspend/Resum: واضحة من إسم الخاصية , إيقاف الثريد نهائيا , تعطيل الثريد (إيقاف لحظي) , متابعة عمل الثريد أين تم تعطيله .
التطبيق الثالث : - التحكم في 3 ثريد , A,B&C مع إستخدام TCriticalSection لحماية المتغير Gvar , كما يعد خلاصة كل ما سبق !. ![]() بالتوفيق ,, دلفي & threads مفاهيم و تطبيقات . - kachwahed - 14-03-2010 يمكن تجميد (Lock) الـ Thread ثم إعادة تشغيله (UnLock) لإنجاز أشغال معينة باستخدام TCriticalSection، أو لمجرد Sleep زمني... مثال: PHP كود : usesRelease هي LeaveCriticalSection لفك الحصار وإطلاق سراح الـ Thread بارك الله لك أخي TF6M بالتوفيق. دلفي & threads مفاهيم و تطبيقات . - mohfa - 14-03-2010 كود : Procedure A or B or C.Execute;
Begin
FreeOnterminate:= False;نحاول قدر المستطاع الابنعاد عن هذا الاسلوب في النصريح بال : كود : FreeOnterminate:= False / trueوالسلام عليكم و رحمة الله و بركاته دلفي & threads مفاهيم و تطبيقات . - kachwahed - 15-03-2010 مكتبة DLLThreadSynchronize لتسهيل Synchronization مع الـ Threads من خلال DLL التعليقات بالفرنسي، منقولة للفائدة .
دلفي & threads مفاهيم و تطبيقات . - paix144 - 15-03-2010 السلام عليكم الظاهر أن الجميع يشارك في الموضوع ما شاء الله إن أمكن إخواني الكرام وضع تعليقات على كل سطر من الكود، فهاذا سيساعدني و يساعد المبتدئين مثيل لضم مفهوم الدرس بسرعة و جزاكم الله كل خير و فتح لكم أبواب الخير دلفي & threads مفاهيم و تطبيقات . - TF6M - 25-03-2010 بسم الله الرحمان الرحيم
السلام عليكم و رحمة الله و بركاته
نقوم بإنشاء برنامج , يشغل ثريد a و b في نفس الوقت ؟ , هنا تتم زيادة نسبة :frusty: , لأنه من الممكن أن يتم خطأ في توقيت الـ سويتش بين a ,b .
يمكن أن نظيف حماية للمتغيرات التي من الممكن أن يتم الولوج إليها من أي قسم من أقسام البرنامج (TCriticalSection) , لكن أيضا من الممكن أن ننتظر إنتهاء تنفيذ a , لنتيح المجال لتنفيذ b بعد التأكد نهائيا من إنتهاء a ليكون برنامجنا أكثر أمانا ! . التطبيق الرابع : 1- يقوم A بإيقاف البرنامج مدة 5 ثواني . 2- يقوم B بإنتظار A حتى إنتهاء تنفيذه , بعدها يبدأ B في العمل . Not Waiting : تنفيذ . Waiting : إنتظار , (لم يبدأ في التنفيذ فعليا). ![]() برنامج ينفذ 2 Threads في وقت واحد , بإستعمل دالة WaitForSingleObject, كملاحظة نستعمل
[FONT=Tahoma]WaitForMultipleObjects في حالة وجود أكثر من 2 Threads ؟. شرح دالة WaitForSingleObject من هنا . بالتوفيق ,, دلفي & threads مفاهيم و تطبيقات . - TF6M - 26-03-2010 بسم الله الرحمان الرحيم السلام عليكم و رحمة الله و بركاته هده المشاركة لا تحتاج توضيح , كل ما في المثال عبارة عن إنشاء thread و تنفيذه , بالإعتماد على دوال الـ Apis , إن لم يكن الكود واضح إبحث عن وظيفة هذه الدوال في MSDN , مثلا ؟؟ : PHP كود : - CreateThread/OpenThread == Constructor .التطبيق الخامس : تطبيق بسيط يوضح إستخدام Apis , لإنشاء thread و التحكم به مباشرة ! . ![]() بالتوفيق ,, دلفي & threads مفاهيم و تطبيقات . - karamofweb - 10-07-2011 شكرا على الموضوع الرائع. لقد لاحظت وجود مشكل و هو حين الضغط على start مرتين او اكثر تزيد سرعة العداد |