السلام عليكم
اخى الشمري عملية الthread ليست للتحكم فى واجهة المستخدم وإنما هى لعمل حسابات معقدة فى thread منفصل لنفترض التالي:
قمت بعمل برنامج به زرار واحد كما هو فى مثالك المرفق..
تريد الان ان تقوم بعمليه حسابية تخذ وقت طويل بالنسبة للمعالج..
لو وضعت استدعيت الدالة من WM_LBUTTONDOWN ما الذى سيحدث؟؟
برنامج لن يستجيب لاي شئ إلى ان ينتهى من العملية الحسابيه..
ما العمل؟؟
5 خطوات
1. WM_MYMESSAGE = WM_USER+1 تضعها فى قسم الـconstant
2. تقوم بعمل دالة, هذه الدالة هى الدالة التى ستقوم بالعملية الحسابية
3. تستدعى هذه الدالة بإستخدام CreateThread
4. فى الدالة بعد الانتهاء من العملية الحسابيه تستخدم الدالة SendMessage لإرسال إشارة لبرنامج بان العملية الحسابية قد انتهت
5. تستقبل الرسالة فى النافذة بنفس الطريقة التى تستقبل بها جميع الرسائل الاخرى, على سبيل المثال WM_LBUTTONDOWN
مثال سخيف ولكنه يشرح الفكرة
WM_MYMESSAGE = WM_USER+100h
int THREADID;
...
case WM_LBUTTONDOWN:
hThread=CreateThread(NULL,NULL,MyThreadProc, 0,&THRADID);
CLOSEHANDLE(hThread);
case WM_MYMESSAGE:
MessageBox(NULL,"Calculation finnished",NULL,MB_OK);
...
void MyThreadProc(wParam:int)
{
long x=0;
for(int i=0;i<90000000;i++)
x*=x;
PostMessage(hwnd,WM_MYMESSAGE,NULL,NULL);
ret
}طبعاً اكيد المثال فيه اخطاء كثيرة ولكنه يوضح الفكرة...
والسلام عليكم
لا إله إلا الله محمد رسول الله
busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.