الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

هل هناك كائن او امر للانتظار مدة معينة ؟؟

بدأه amdman في 14 أغسطس 2008 · 7 رد · 1,292 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

هل هناك كائن او امر للانتظار مدة معينة ؟؟

يعنى مثلا ينتظر 10 ثوانى و ينفذ امر ثم ينتظر 15 ثانية مثلا و ينفذ امر

#2

استخدم الأداة Timer لهذا الغرض ..

أو يمكنك استخدام الكود التالي :

  1. //add this line to the top of your file
  2. using System.Threading;
  3. // put those lines in a command button or so
  4. Thread.Sleep(2000);
  5. MessageBox.Show("Hello");
  6.  

مشكلة هذا الكود أنه يعلق جهازك إلى أن تنتهي الفترة الزمنية المحددة بالمللي ثانية ( جزء من ألف من الثانية ) ..

حل آخر( لا يتسبب في تعليق البرنامج ) :

  1.  
  2. Delay(5); // five second delay
  3.  
  4.  
  5.  
  6. private void Delay(int DelayInSeconds)
  7. {
  8. TimeSpan ts;
  9. DateTime dt = DateTime.Now.AddSeconds(DelayInSeconds);
  10. do
  11. {
  12. ts = dt.Subtract(DateTime.Now);
  13. Application.DoEvents(); // keep app responsive
  14. System.Threading.Thread.Sleep(50); // Reduce CPU usage (keep interval SMALL)
  15. }
  16. while (ts.TotalMilliseconds > 0);
  17. }
  18.  

تم تعديل هذه المشاركة بواسطة المبرمج أحمد في 14 أغسطس 2008 في 22:04

سبحان الله وبحمده ... سبحان الله العظيم

#3

أعتقد ان رد الاستاذ المبرمج احمد ليس رداً لسؤال الاخ العضو السائل

وعلى حسب ما فهمت انه يريد تنفيذ اوامر مختلفة كل عدد من الثواني

واذا كان الامر كذلك فأنا عندي فكرة وهي:-

استخدام 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")

ارجو تجربتها وان كان هناك خطأ في الفكرة فابلاغي بالخطأ للأسف ليس عندي فيجوال ستوديو حاليا على الجهاز حتى اجربها بنفسي قبل طرح المشاركة

#4

أخي الكريم يمكنك أستخدام أكثر من 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;

timers.rar

تم تعديل هذه المشاركة بواسطة 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

#5

لكن السؤال ايهما اسرع واخف على الذاكرة

ذلك هو العامل الذي يحدد احسن طريقة من طرق مختلفة كلهم يؤدوا نفس الوظيفة

اعتقد وجود تايمر واحد فقط ومتغير واحد فقط للتحقق وتنفيذ الامر المراد تنفيذه اسرع واخف من وجود اكثر من تايمر بالاضافة انه كلما تم تفعيل تايمر لابد من ايقاف الاخرين وفي وجود عدد كبير من الاوامر المراد تنفيذها سيكون ذلك الحل به كثير من الكود والتعقيد

برأي ان حلك هذا مفيد في حالة لو اردنا تنفيذ كود مرة اخرى وفي هذه الحالة يمكن بالفعل تفعيل او ايقاف التايمر المراد تنفيذ كوده

لكن في سؤال الاخ كما يقول انتظار فترة معينة ثم تنفيذ كود ثم انتظار فترة اخرى وتنفيذ كود اخر

بالتالي في رأي ان الحل الاول ( بوجود عداد وتايمر واحد ) سيكون ملائم لهذه المسألة

وبانتظار ردك .....

#6

تحية طيبة ..

فهذا تايمر متطور من تصميمي .. هو عبارة عن اداة يُمكن لك اضافتها واستعمالها في برنامجك .. بالاضافة إلى الوظيفة التي تطلبها ، فإنه بإمكانه القيام بالعديد العديد من الوظائف الاخرى .. بهذا الملف "بالمرفقات" أمثلة وافية عنه تُبين مزاياه وسهولة استخدامه.

بالتوفيق.

Timer.rar

#7
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

#8

اجابتي كانت في ردي السابق بأنه لوكان هناك اوامر كثيرة سيكون استخدام تايمر لكل امر شئ صعب وذلك لضرورة تفعيل وايقاف كثيرة

كما ان استخدام تايمر واحد ومتغير مرئي للمشروع ( على مستوى الكلاس public) يسهل عملية كتابة الكود لأنه كل المطلوب منك عملية اختيار لقيمة لهذا المتغير وبناءاً عليها يتم تنفيذ الامر المراد وبالتالي تتبع الكود سيكون اسهل وكتابته اسهل لأنها كلها في مكان واحد

كما ان وجود اكثر من تايمر يعني وجود اكثر من object في الذاكرة ولن تلغى هذه الكائنات الى عند غلق البرنامج وبالتالي تم تحميل الذاكرة بكائنات لن استفيد منها سوى مرة واحدة ( اذا كنت لا اريد ان اعيد امر من الذي تم تنفيذه )

وبالتالي وجود كائن واحد ومتغير واحد سيكون اخف للذاكرة

وفي كل الاحوال على صاحب السؤال تجربة كل من الحلين وتقرير ايهما يصلح لمشكلته

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…