هل هناك كائن او امر للانتظار مدة معينة ؟؟
يعنى مثلا ينتظر 10 ثوانى و ينفذ امر ثم ينتظر 15 ثانية مثلا و ينفذ امر
هل هناك كائن او امر للانتظار مدة معينة ؟؟
يعنى مثلا ينتظر 10 ثوانى و ينفذ امر ثم ينتظر 15 ثانية مثلا و ينفذ امر
استخدم الأداة Timer لهذا الغرض ..
أو يمكنك استخدام الكود التالي :
مشكلة هذا الكود أنه يعلق جهازك إلى أن تنتهي الفترة الزمنية المحددة بالمللي ثانية ( جزء من ألف من الثانية ) ..
حل آخر( لا يتسبب في تعليق البرنامج ) :
تم تعديل هذه المشاركة بواسطة المبرمج أحمد في 14 أغسطس 2008 في 22:04
سبحان الله وبحمده ... سبحان الله العظيم
أعتقد ان رد الاستاذ المبرمج احمد ليس رداً لسؤال الاخ العضو السائل
وعلى حسب ما فهمت انه يريد تنفيذ اوامر مختلفة كل عدد من الثواني
واذا كان الامر كذلك فأنا عندي فكرة وهي:-
استخدام Timer وبداخل التايمر هناك عداد معرف على مستوى Class وهذا العداد يزيد بواحد كل ثانية على اعتبار ان التايمر مضبوط على 1000 ملي ثانية
وفي المكان الذي تريده اختبر قيمة هذا العداد بطريقة switch .... case وعند القيم التي تريدها ضع الاوامر التي تريد تنفيذها
فمثلا
على مستوى الكلاس تعرف هذا المتغير ( العداد )
public int counter;
وفي حدث Tick للتايمر تضع كود زيادة العداد
counter++;
ثم في main تضع كود ليختبر قيمة العداد
switch counter
case 5:
messagebox.show ( "5 sec ");
case 10 :
messagebox.show ("10 sec ");
case 20 :
messagebox.show("20 sec");
default:
messagebox.show ("the end of selection")
ارجو تجربتها وان كان هناك خطأ في الفكرة فابلاغي بالخطأ للأسف ليس عندي فيجوال ستوديو حاليا على الجهاز حتى اجربها بنفسي قبل طرح المشاركة
أخي الكريم يمكنك أستخدام أكثر من Timer كل تايمر ينجز أحد الأوامر
الملف المرفق معمول بدلفي جرب الملف التنفيذي أرجو أن يكون ما تريد
أرفقت الكودفي حال لم يكن لديك دلفي
var
Form1: TForm1;
** متحولات عامة **
a : integer = 0;
b : integer = 0;
implementation
{$R *.DFM}
** حدث التايمر الأول **
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if a <> 5 then
begin
a := a + 1
end
else
begin
timer1.Enabled := false;
showmessage('this is the first timer');
timer2.Enabled := true;
end;
end;
**حدث التايمر الثاني **
procedure TForm1.Timer2Timer(Sender: TObject);
begin
if b <> 5 then
begin
b := b + 1
end
else
begin
timer2.Enabled := false;
showmessage('this is the second timer');
end;
end;
** حدث بداية التايمر الأول **
procedure TForm1.Button1Click(Sender: TObject);
begin
timer1.Enabled := true;
end;تم تعديل هذه المشاركة بواسطة rober في 16 أغسطس 2008 في 00:48
I'm Away For Sometimes
I'll Finish My Works
Come Back Soon
More Study > More Search > More Try > More Learning > Great Success
لكن السؤال ايهما اسرع واخف على الذاكرة
ذلك هو العامل الذي يحدد احسن طريقة من طرق مختلفة كلهم يؤدوا نفس الوظيفة
اعتقد وجود تايمر واحد فقط ومتغير واحد فقط للتحقق وتنفيذ الامر المراد تنفيذه اسرع واخف من وجود اكثر من تايمر بالاضافة انه كلما تم تفعيل تايمر لابد من ايقاف الاخرين وفي وجود عدد كبير من الاوامر المراد تنفيذها سيكون ذلك الحل به كثير من الكود والتعقيد
برأي ان حلك هذا مفيد في حالة لو اردنا تنفيذ كود مرة اخرى وفي هذه الحالة يمكن بالفعل تفعيل او ايقاف التايمر المراد تنفيذ كوده
لكن في سؤال الاخ كما يقول انتظار فترة معينة ثم تنفيذ كود ثم انتظار فترة اخرى وتنفيذ كود اخر
بالتالي في رأي ان الحل الاول ( بوجود عداد وتايمر واحد ) سيكون ملائم لهذه المسألة
وبانتظار ردك .....
Prof.Mendl كتب:لكن السؤال ايهما اسرع واخف على الذاكرةذلك هو العامل الذي يحدد احسن طريقة من طرق مختلفة كلهم يؤدوا نفس الوظيفة
اعتقد وجود تايمر واحد فقط ومتغير واحد فقط للتحقق وتنفيذ الامر المراد تنفيذه اسرع واخف من وجود اكثر من تايمر بالاضافة انه كلما تم تفعيل تايمر لابد من ايقاف الاخرين وفي وجود عدد كبير من الاوامر المراد تنفيذها سيكون ذلك الحل به كثير من الكود والتعقيد
برأي ان حلك هذا مفيد في حالة لو اردنا تنفيذ كود مرة اخرى وفي هذه الحالة يمكن بالفعل تفعيل او ايقاف التايمر المراد تنفيذ كوده
لكن في سؤال الاخ كما يقول انتظار فترة معينة ثم تنفيذ كود ثم انتظار فترة اخرى وتنفيذ كود اخر
بالتالي في رأي ان الحل الاول ( بوجود عداد وتايمر واحد ) سيكون ملائم لهذه المسألة
وبانتظار ردك .....
كلامك صحيح أخي الكريم و أنا معك لكن يا ريت لو تقترح حل يفيدنا و يفيد الأخ amdman
I'm Away For Sometimes
I'll Finish My Works
Come Back Soon
More Study > More Search > More Try > More Learning > Great Success
اجابتي كانت في ردي السابق بأنه لوكان هناك اوامر كثيرة سيكون استخدام تايمر لكل امر شئ صعب وذلك لضرورة تفعيل وايقاف كثيرة
كما ان استخدام تايمر واحد ومتغير مرئي للمشروع ( على مستوى الكلاس public) يسهل عملية كتابة الكود لأنه كل المطلوب منك عملية اختيار لقيمة لهذا المتغير وبناءاً عليها يتم تنفيذ الامر المراد وبالتالي تتبع الكود سيكون اسهل وكتابته اسهل لأنها كلها في مكان واحد
كما ان وجود اكثر من تايمر يعني وجود اكثر من object في الذاكرة ولن تلغى هذه الكائنات الى عند غلق البرنامج وبالتالي تم تحميل الذاكرة بكائنات لن استفيد منها سوى مرة واحدة ( اذا كنت لا اريد ان اعيد امر من الذي تم تنفيذه )
وبالتالي وجود كائن واحد ومتغير واحد سيكون اخف للذاكرة
وفي كل الاحوال على صاحب السؤال تجربة كل من الحلين وتقرير ايهما يصلح لمشكلته
المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية
جارٍ التحقق من المتواجدين…