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

إنشاء الThread بدون استخدام Vcl

مغلق
بدأه M_Asize في 31 يناير 2006 · 6 رد · 813 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

انشاء Thread بدون استخدام VCl (باستخدام API)

يوجد نقطتين اساسيتين من أجل انشاء Thread باستخدام توابع API

1- انشاء Thread باستخدام التابع CreateThread

2- انشاء تابع الذي سينفذ عند الدخول إلى الـ Thread (هذا التابع يخبر الـ Thread من أين يبدأ )

هذا التابع يكون بالشكل

1- اسم التابع

2- يحوي على بارامتر واحد من النوع Pointer

3- يعيد قيمة من النوع LongInt

4- يجب أن يمللك التصريح StdCall

فيكون التصريح من الشكل

Function MyThread(ptr : pointer) : LongInt; StdCall;

التابع CreateThread

CreateThread(
	lpThreadAttributes: Pointer;   
	dwStackSize: DWORD;            
 	 lpStartAddress: TFNThreadStartRoutine;
 	 lpParameter: Pointer;              
	dwCreationFlags: DWORD;               
        var lpThreadId: DWORD):               
       THandle; stdcall;

البارامترات

1- lpThreadAttributes :مؤشر إلى البنية SECURITY_ATTRIBUTES الذي يحدد إذا كان Handle الـ Thread سيورث إلى النماذج الابناء ام لا إذا كان Nil لن يتم توريث الـ Hanle

2- dwStackSize : يحدد حجم كومة الـ Thread (الحجم بالبايت) إذا كانت قيمة البارامتر صفر

سوف يتم إعادة تحجيم الكومة بحيث تناسب الـ Thread

3- lpStartAddress : عنوان التابع الذي يحدد نقطة البداية للـ Thread (عنوان التابع الذي قمنا بإنشاءه MyThread)

4- lpParameter : يحدد قيمة 32 بت تمرر إلى الـ Thread

5- dwCreationFlags : التحكم في إنشاء الـ Thread يأخد قيمتين

• CREATE_SUSPENDED : يتم إنشاء الـ Thread وهو في حالة إيقاف مؤقت حتي يتم إستدعاء الاجراء ResumeThread

• القيمة صفر : سوف يبدأ الـ Thread العمل عند الإنشاء فورا

6- lpThreadId : معرف الـ Thread

في حال نجاح التابع يعيد قيمة الـ Handle الخاصة بالـ Thread المنشأ

في حال الفشل يعيد Nil .

المرفق مثال

CreateThread.rar

إننا محكومون بالأمل وما يحدث الآن ليس نهاية العالم

#2

بارك الله فيك أخي الكريم

d4baa0.gif
#3

جزاك الله خيراً أخي M_Asize معلومات مفيدة جداً

قبل مدة سألت سؤال حول هذا الموضوع ( Thread )

السؤال لا زال موجوداً في الصحفة الرئيسة في القسم :)

وهذه المعلومات جاءت في وقتها :)

بارك الله فيك.

السلام عليكم ورحمة الله وبركاته.

تم تعديل هذه المشاركة بواسطة fafe0 في 31 يناير 2006 في 23:30

#4

السلام عليكم

أخي M_Asize ، بالنسبة للشروط التي ذكرتها حول الدالة المطلوبة ( التي يبدأ منها الـ Thread )، فهي ليست إلزامية:

اقتباس
هذا التابع يكون بالشكل

1- اسم التابع

2- يحوي على بارامتر واحد من النوع Pointer

3- يعيد قيمة من النوع LongInt

4- يجب أن يمللك التصريح StdCall

فيكون التصريح من الشكل

أنا جربت أيFunction حتى بدون قيمة راجعة، أو حتى ( Procedure) ، ومهما كان عدد البارمترات، حتى لو لم يكن لها أي بارميتر، ودون وضع طريقة للاستدعاء، فإن الثريد يعمل عادي جداً، وأنا لا أدري هل هناك آثار جانبية، أو أخطاء قد تنتج إذا خالفت الشكل النموذجي للدالة ؟؟؟

أريد أن أعرف لماذا وضعت تلك الشروط للدالة الخاصة بالـ Thread ؟؟؟؟

مشكور مقدماً.

#5

للرفع،

يعني معقول السؤال صعب لهذه الدرجة ؟!

أرجو من أي عضو له إجابة عن هذا سؤالي أن يتفضل بها مشكوراً :-)

والسلام عليكم.

#6

كما نقول دائماً لأي معلومات عن دوال النظام علينا الرجوع الى MSDN ...

CreateThread

ThreadProc

Creating Threads

إقرأ ما كتب هناك بتمعن ( إقرأه اكثر من مرة ) ستجد إجابات لبعض تساؤلاتك ...

تحياتي

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

===

اقتباس

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

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

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

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

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

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

===

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

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

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

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

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

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

#7

عفواً قد يدل سؤالي عن ........... ولكن ما هو Thread وبارك الله فيك أخي الكريم

من جد وجد ومن زرع حصد

هذا الموضوع مغلق.

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