هل يتم تحرير ال Thread عند انهاء عمل البرنامج ؟
#1
السلام عليكم ورحمة الله

اخواني الكرام,

لو انا في برنامجي عملت ثريد Thread ,, وبعدها عملت Application Temniate

هل يتم تحرير الثريد الذي عملته على اعتبار ان البرنامج الآب تم عمل terminate عليه ؟

وبارك الله لكم
فرّج همّ المهمومين يا الله
اللهم فك قيد اسرانا و اسرى المسلمين
الرد
#2
استخدم FreeOnTerminate لغلق الـ Thread، والتجربة خير إجابة على سؤالك Smile
بالتوفيق.
اللهم احقن دماء المسلمين، لا تنسوهم بالدعاء...
الرد
#3
السلام عليكم
بما أنه تم إنهاء الـ Prossec سيترتب عليه إنهاء كل الـ THreads التابعة .
هناك العديد من الطرق و كما أشار الأخ kachwahed أظف :

PHP كود :
Initialization
  MThrd
:=TMyThread.Create(true);
Finalization
  MThrd
.Free;

end. 

بالتوفيق ,,
I'M Fly Like A G6

الرد
#4
نعم, ولكن لو لم يتم التحرير,, ماذا يحدث ؟
هل يشكل عبئ على الجهاز ؟

وكيف يحرر, بعد اغلاق البرنامج ؟
هل ينفع شئ آخر غير الريستارت للجهاز ؟

ان شاء الله السؤآل يكون وآضحا,,
بارك الله لكم
فرّج همّ المهمومين يا الله
اللهم فك قيد اسرانا و اسرى المسلمين
الرد
#5
نعم, : يفترض انك فهمت أنه عند إنها البروسس سيتم إنهاء كل الـ Threads الصادرة منه من طرف النظام .

ولكن لو لم يتم التحرير,, ماذا يحدث ؟ : بالطبع سيتم مواصلة معالجة التعليمات الخاصة بالثريد .

هل يشكل عبئ على الجهاز ؟ : كل التعليمات و الأوامر يتم معالحتها من طرف MP & آلية المعالجة لنظام التشغيل .... فالأمر هنا نسبي !!! .

وكيف يحرر, بعد اغلاق البرنامج ؟ : بواسطة الخاصية Terminate أو الهادم Destroy (الصنف THread)
او TerminateThread (نظام Win) .

هل ينفع شئ آخر غير الريستارت للجهاز ؟ : أظنك تقصد مادا يمكننا فعله بالـ THread ... ببساطة
و فكرة عامة هو تايمر ضئيل الدور < 1ms ... الأن تخيل ماذا يمكنك فعله (بحث عن ملفات , قراءة من ملف , نسخ , تزامن إجرائين أو اكثر في نفس الوقت , .... الخ) .

======================================================
عملت المثال على السريع .. بحيث يمكنك متابعة الـ THreads الصادرة من كل بروسس تحدده (شغال)
لكي تتأكد :

[صورة: 56485.jpg]

PHP كود :
{$Hints Off}
{
$Warnings Off}
{
$Optimization On}
Type
   ProcTab
=Array [0..100]Of DWORD;
Var
 
PProc:ProcTab;
 
i:Byte;
 
Proc: TProcessEntry32;

ProCedure TForm1.GetProcList;
Var
   
Handle: THandle;
begin
Handle
:=CreateToolHelp32SnapShot($00000002, 0);
Proc.dwSize:=Sizeof(TProcessEntry32);
while 
Process32Next(Handle, Proc) do
 
Begin
 ProcList
.Items.Add(Proc.szExeFile);
 
PProc[i]:=Proc.cntThreads;
 
Inc(i);
 
End;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
I
:=0;
GetProcList(Proc);
end;

procedure TForm1.ProcListClick(Sender: TObject);
begin
with Proc
,ProcList,Label1 do
   
begin
   caption 
:= inttostr(PProc[ItemIndex]);
   
end;
end; 

بالتوفيق ,,
I'M Fly Like A G6

الرد
#6
جزاك الله خيرا اخي tf6m على التوضيح,,
فرّج همّ المهمومين يا الله
اللهم فك قيد اسرانا و اسرى المسلمين
الرد


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


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