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

كيف نبرمج تطبيقاتنا بطريقة حديثة ؟ , كيف يمكن لنا أن نسرع من أداء برنامجنا دون وقوع مشاكل أو :frusty: , كيف لنا أن تشغيل عدة عمليات
في آن واحد (ظاهريا) بالتوازي و بشكل متزامن (مدروس) ؟ , ببساطة البرمجة بالإعتماد على آلية Multi_Thread .

بعض التوضيحات "نظريا" :
أنظمة التشغيل تتوافق تماما مع هندسة المعالج و آلياته , الأنظمة الحديثة (Multi_Tache) أساسا تعتمد على تقليص زمن التنفيذ كيف ؟
عن طريق آلية Pipeline, معالج يدعم pipeline ينفذ تعليمات برنامج ما "بالتزامن في طور عمل واحد" وفق روتينا المعالج :
Fetch,decode,memory access,write back لاحظ الجدول التالي الدي يوضح آلية معالجة برنامج بـ Pipeline

[صورة: 1561g.jpg]

نفرض مثلا أن لدينا برنامج 20 %تعليمات تحميل و تخزين , 40 %تعليمات منطقية و مقارنة ... , 40 %تعليمات قفز و تفرع ...
لو كان المعالج لا يدعم pipeline سيظطر لتنفيذ تعليمة بعد تعليمة و لن يدخل للتعليمة الجديدة حتى ينهي السابقة ! و إذا كان كل صنف
من التعليمات يحتاج طورين أو أكثر لتنفيذ التعليمة الواحد لك أن تتخيل "مدى بطئ معالجة تعليمات البرنامج المحمل الواحد" لكن مع pipline
أطوار عمل أقل و أداء أسرع يمكن أن ننفذ أكثر من برنامج (Process) بشكل متزامن (Synchronize) بإزاحة توافق (Priority) المخصصة
لكل process على أساس Pid(رقم تعريف البروسس), hProcess(مقبض البروسس), لم أشرح كثيرا فقط صطحيا للدخول في جو الدرس ! .

"الان ماذا لو قمنا بنفس عمل نظام التشغيل داخل تطبيقاتنا ؟ يعني أن ننفذ العديد من العمليات بشكل متزامن في آن واحد (ظاهريا) !."

الشكل العام لإنشاء thread واحد كمثال أول , نعتمد على خصائص البرمجة poo بشكل عادي يعني إنشاء
class
مورث من TThread في ديلفي .

PHP كود :
{$IFDEF VER150}//delphi 7
Type
 MyThread 
= Class (TTHread)
 Private
  
_i:Byte;
 Protected
  
Procedure DoSomeThing;
  
Procedure Execute;OverRide;
 Public
  
Constructor Create (Suspended:Boolean);
  
Destructor Destroy;OverRide;
 
End;
{
$ENDIF}

var
  
MainFrm: TMainFrm;
  
MyTh :MyThread;

implementation

{$R *.dfm}

Constructor MyThread.Create;
Begin
Inherited Create
(Suspended);//If False = start when we call create constructor !.
_i:= 0;//Initialization ...
End;

Destructor MyThread.Destroy;
Begin
//Set Object That Created Free ...
Inherited;//Call the oroginal Destructor (TThread Class).
End;

Procedure MyThread.Execute;
Begin
 repeat
   Sleep
(100); //500 = 1/2 s
   
Synchronize(DoSomeThing);
  
until Terminated;
End;

{
$X+}// Set extended syntax on

Procedure MyThread.DoSomeThing;
Begin
Inc
(_i);
If 
_i <= 255 Then
MainFrm
.Label3.Caption:= IntToStr(_i) Else
 
_i:= 0;
End;

procedure TMainFrm.Button1Click(Sender: TObject);
begin
 MyTh
:=MyThread.Create(False);
end;

procedure TMainFrm.Button2Click(Sender: TObject);
begin
Try
 
MyTh.Suspend;
Except
 On E 
: Exception Do
  
MessageBoxA(0,Pchar(E.Message),Nil,0);
 
End;
end;

procedure TMainFrm.Button3Click(Sender: TObject);
begin
Try
 
MyTh.Resume;
Except
 On E 
: Exception Do
  
MessageBoxA(0,Pchar(E.Message),Nil,0);
 
End
end
;

procedure TMainFrm.Button4Click(Sender: TObject);
begin
 MyTh
.Terminate;
 
//finalization ...
 
Label3.Caption:= '0';
 
MainFrm.Button1.Enabled:= True;
end;

procedure TMainFrm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
 Button4Click
(Sender);// THread Must Be Terminated!.
 
ExitProcess(GetLastError);//Exit .
end;

initialization
 MyTh
:=MyThread.Create(True);
finalization
 MyTh
.Free;
end. 
التوجيه IFDEF هنا أظفته متعمدا لتحديد إصدار دلفي المعتمد في التطبيق يمكن تجاوزها (إظافة فقط) كما أني أظفت التوجيه $X
الدي يتيح لنا دمج الدوال و الإجراءات دون مراعات ترتيب الـ implementation (أيضا كإظافة:tongSmile
,
قمنا بإدراج initialization / finalization يكفي أن نعمل Resume لبدأ تنفيذ Execute الخاص بالـ Thread آليا !
.

- هناك عشرات التعريفات و المقدمات حول موضوع الـ THread لذا كان علي الدخول من منطلق
أخر , هدا
التطبيق الأول مثال بسيط للمناقشة ....

[صورة: myapp.gif]
. في هذا المثال قمنا ببرمجة عداد بسيط لن تنجح في تنفيذه دون إستعمال الـ threads! , هنا لم يتجمد البرنامج (freeze)
& النتيجة دورية 1/10 ثانية & تحكم أكثر & أداء أحسن (مثلا إستغنينا عن الـ Timer).


الملفات المرفقة
.rar   Using THreads[01].rar (الحجم : 3 ك ب / التحميلات : 303)
I'M Fly Like A G6

[-] كل من 1 user says قال شكرا ل TF6M على المشاركة المفيدة
  • annabil23
الرد


الردود في هذا الموضوع
دلفي & 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 ) ضيف كريم