انشاء 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 .
المرفق مثال
