دلفي & threads مفاهيم و تطبيقات .
#7
اولا السلام عليكم و رحمة الله و بركاته .

إقتباس :[FONT=Arial]كما قلت لك أعدت إنشاءه فقط في حالة إيقافه يعني لا يمكن أن ننشأه مرتين

ولكن ياخي الكريم TF6M اين شرط التاكد من عدمه قبل الانشاء من جديد .
ثانيا حتى و لو كنت قد تاكدت من التوقف من الاحسن تحرير ال Thread قبل انشائه مرة جديد يعني استطيع ان استعمل مثلا :
كود :
if terminated then free
لقول مثلا .

كود :
[COLOR=#0000bb]ExitProcess[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]GetLastError[/COLOR][COLOR=#007700]);[/COLOR][COLOR=#ff8000]//Exit [/COLOR]

هكذا تجبر النظام ان يوقف التطبيق مهما كانت النتائج حتى باستعمال GetLastError
هنا تقول MS من خلال ال msdn ليس من المستحسن استعمال ال ExitProcess مع ال Threads hاو ال Pip lining لماذا :

يمكن ان يكون هناك Infinit او عملية غير منتهية او مايدعى ال Long Process اذا استعملنا ال ExitProcess فهذا سيجبر التطبيق على التوقف مهما كانت النتائج , ومن بين النتائج الخطيرة هي ال System او Memory instability .
في حالتك يمكن استعمال ال Waitfor و هذا سوف يجبر ال Thread التحقق من اي Operation غير منتهية او من عدم تفريغ ال Quee وهذا سوف يحرر كل ال Ressources قبل تحرير ال Thread

اقول و اعيد انك تقوم بانشاء ال Thread مرتين لماذا تتبع معي ال المشهد :

1* عند بداء التطبيق يتم انشاء ال Thread و لكن Suspended يعني بانتطار اي عملية .
2* عندما اظغط على الزر 2 هذا سوف يقوم بتوقيف ال Thread لزمن معين او Suspended .
3* عندما اظغط على الزر 3 هذا سوف يقوم باعادة تشغيل ال Thread بعدما كان Suspended .
4* عندما اظغط على الزر 4 هذا سوف يقوم بتوقيف ال Thread و انهائه و لكن ليس تحريره يعني ال Handle مازال موجود و ال Ressources مازالت في ال Thread Quee .
*5 عندما اظغط على الزر Start ماذا سيحصل ياترى :
سوف يتم اعادة انشاء نفس ال Thread و الذي اصلا مازال موجود و لم يتم تحريره .

6* OnCloseQuery :
سوف يتم مناداة ال المرحلة 4 و يتم غلق التطبيق . رغم ان ال Thread مازال موجود في الذاكرة اقصد مازال الحيز Reserved .

اذا اما ان نستعمل ال :
FreeOnTreminate في وقت الانشاء مع :
كود :
Constructor MyThread.Create; Begin Inherited Create(Suspended);//If False = start when we call create constructor !. _i:= 0;//Initialization ... End;
او نتاكد من تحريره في وقت الهدم :
مع : If terminated then free .
او نستعمل ال Waitfor ثم ال free .

لان terminate لا تحرر ال Thread بل توقفه عن العمل .

انظر هنا مثلا
كود :
https://forums.codegear.com/message.jspa?messageID=142218

اتمنى ان الفكرة وصلت .

بارك الله فيك و في اخي kachwahed و كل الاعضاء .

و السلام عليكم
الرد


الردود في هذا الموضوع
دلفي & threads مفاهيم و تطبيقات . - بواسطة TF6M - 11-03-2010, 03:16 PM
دلفي & threads مفاهيم و تطبيقات . - بواسطة mohfa - 11-03-2010, 05:27 PM
دلفي & threads مفاهيم و تطبيقات . - بواسطة TF6M - 11-03-2010, 05:47 PM
دلفي & threads مفاهيم و تطبيقات . - بواسطة mohfa - 11-03-2010, 06:04 PM
دلفي & threads مفاهيم و تطبيقات . - بواسطة paix144 - 11-03-2010, 09:35 PM
دلفي & threads مفاهيم و تطبيقات . - بواسطة mohfa - 12-03-2010, 10:26 AM
دلفي & threads مفاهيم و تطبيقات . - بواسطة TF6M - 12-03-2010, 11:15 AM
دلفي & threads مفاهيم و تطبيقات . - بواسطة TF6M - 12-03-2010, 02:55 PM
دلفي & threads مفاهيم و تطبيقات . - بواسطة mohfa - 12-03-2010, 07:17 PM
دلفي & threads مفاهيم و تطبيقات . - بواسطة TF6M - 14-03-2010, 03:54 PM
دلفي & threads مفاهيم و تطبيقات . - بواسطة mohfa - 14-03-2010, 05:58 PM
دلفي & threads مفاهيم و تطبيقات . - بواسطة paix144 - 15-03-2010, 09:12 PM
دلفي & threads مفاهيم و تطبيقات . - بواسطة TF6M - 25-03-2010, 06:18 PM
دلفي & threads مفاهيم و تطبيقات . - بواسطة TF6M - 26-03-2010, 02:25 AM

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم