السلام عليكم ورحمة الله
اخواني الكرام,
لو انا في برنامجي عملت ثريد Thread ,, وبعدها عملت Application Temniate
هل يتم تحرير الثريد الذي عملته على اعتبار ان البرنامج الآب تم عمل terminate عليه ؟
وبارك الله لكم
السلام عليكم
بما أنه تم إنهاء الـ Prossec سيترتب عليه إنهاء كل الـ THreads التابعة .
هناك العديد من الطرق و كما أشار الأخ kachwahed أظف :
PHP كود :
Initialization
MThrd:=TMyThread.Create(true);
Finalization
MThrd.Free;
end.
بالتوفيق ,,
نعم, ولكن لو لم يتم التحرير,, ماذا يحدث ؟
هل يشكل عبئ على الجهاز ؟
وكيف يحرر, بعد اغلاق البرنامج ؟
هل ينفع شئ آخر غير الريستارت للجهاز ؟
ان شاء الله السؤآل يكون وآضحا,,
بارك الله لكم
نعم, : يفترض انك فهمت أنه عند إنها البروسس سيتم إنهاء كل الـ Threads الصادرة منه من طرف النظام .
ولكن لو لم يتم التحرير,, ماذا يحدث ؟ : بالطبع سيتم مواصلة معالجة التعليمات الخاصة بالثريد .
هل يشكل عبئ على الجهاز ؟ : كل التعليمات و الأوامر يتم معالحتها من طرف MP & آلية المعالجة لنظام التشغيل .... فالأمر هنا نسبي !!! .
وكيف يحرر, بعد اغلاق البرنامج ؟ : بواسطة الخاصية Terminate أو الهادم Destroy (الصنف THread)
او TerminateThread (نظام Win) .
هل ينفع شئ آخر غير الريستارت للجهاز ؟ : أظنك تقصد مادا يمكننا فعله بالـ THread ... ببساطة
و فكرة عامة هو تايمر ضئيل الدور < 1ms ... الأن تخيل ماذا يمكنك فعله (بحث عن ملفات , قراءة من ملف , نسخ , تزامن إجرائين أو اكثر في نفس الوقت , .... الخ) .
======================================================
عملت المثال على السريع .. بحيث يمكنك متابعة الـ THreads الصادرة من كل بروسس تحدده (شغال)
لكي تتأكد :
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;
بالتوفيق ,,
جزاك الله خيرا اخي tf6m على التوضيح,,