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

مشكلة في التعامل مع ال timer

بدأه الاخير زمانه في 28 يونيو 2011 · 10 رد · 544 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

اريد حساب وقت تنفيذ كود معين

قلت اسوي timer اشغله قبل تنفيذ الكود - و اقوم بايقافه بعد الكود - ثم اعرض النتيجة - لكني لم احصل على شيء - لم افهم المشكلة صراحة

الكود الذي قمت بتجربته كالاتي

int time = 0;
        private void button1_Click(object sender, EventArgs e)
        {

            timer1.Start();

            for (int i = 0; i < 100000; i++) ;

            timer1.Stop();

            MessageBox.Show(time.ToString());
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            time++;        
        }

لكن يطبعلي 0 في كل مرة - لم اعرف السبب و اين المشكلة في الكود

/index.php/topic/264448-%D8%A7%D9%84%D8%A8%D8%AF%D8%A7%D9%8A%D8%A9-%D9%85%D8%B9-%D8%A7%D9%84%D8%A7%D9%86%D8%AF%D8%B1%D9%88%D9%8A%D8%AF/

 

اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ

#2

السلام عليكم

اولا يجب عليك وضع قيمة interval اذا لم تضعها من قبل مثل

timer1.Interval = 100

اي يتم تنفيذ المؤقت كل 100 ملي ثانية اي في الثانية الواحدة ينفذ 10 مرات

والمشكلة عندك في جملة for حيث لاتنفع لعمل الانتظار وستجد ان وقتها غير معدود خاصة في الاجهزة الحديثة لذا يمكن تغييرها كمايلي :

   for (int i = 0; i < 10000; i++)
            {
              System.Windows.Forms.Application.DoEvents();
            }
#3

السلام عليكم ورحمه الله وبركاته

اخي جرب الكود التالي


static void Main(string[] args)
{
DateTime start = DateTime.Now;
Print(100);
DateTime End = DateTime.Now;
TimeSpan ts = End - start;
Console.WriteLine(ts.TotalMilliseconds);
}

static void Print(int n)
{
for(int i=0;i<n;i++)
Console.WriteLine("VB Helper!!");
}

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

.:: Wish to become better and better ::.

#4

و عليكم السلام و رحمة الله

اخي طارق - انا فعلا قمت بأعطاء قيمة ل interval لكن الامر لم ينجح - للأن لا افهم المشكلة

الكود الذي في الاعلى فقط كمثال وضعته للسؤال - فعليا لدي كود ثاني يقوم بعملية معينة - و ايضا يظهر 0

الاخ VB Helper

فعلا لم تخطر ببالي هذه - حساب الوقت من الحاسبة قبل و بعد التنفيذ - اتصور الامر تنفذ تمام

جزاكم الله خيرا

و شكرا جزيلا

/index.php/topic/264448-%D8%A7%D9%84%D8%A8%D8%AF%D8%A7%D9%8A%D8%A9-%D9%85%D8%B9-%D8%A7%D9%84%D8%A7%D9%86%D8%AF%D8%B1%D9%88%D9%8A%D8%AF/

 

اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ

#5

السلام عليكم ورحمه الله وبركاته

لاشكر على واجب اخي .. بالتوفيق ..

.:: Wish to become better and better ::.

#6

السلام عليكم

يظهر لم انتبه لسؤالك جيدا .

فلحساب زمن تنفيذ الكود من الافضل استخدام STOPWATCH كمايلي :

  //using System.Diagnostics;
            Stopwatch sw = new Stopwatch();
            sw.Start();

            for (int i = 0; i < 100000; i++) ;


            sw.Stop();

            Console.WriteLine( sw.ElapsedMilliseconds);
            //OR
            Console.WriteLine(sw.Elapsed.Seconds);
#7

السلام عليكم ورحمه الله وبركاته

اخي يمكنك استخدام ال Stopwatch كما ذكر الاخ طارق, كنت سأذكرها للفائدة ولكن سبقني بها .. بالتوفيق ..

.:: Wish to become better and better ::.

#8

و عليكم السلام و رحمة الله و بركاته

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

ايضا طريقة ال Stopwatch جديدة علي ولم اسمع بها من قبل

شيئ جميل

جزاكم الله خيرا

/index.php/topic/264448-%D8%A7%D9%84%D8%A8%D8%AF%D8%A7%D9%8A%D8%A9-%D9%85%D8%B9-%D8%A7%D9%84%D8%A7%D9%86%D8%AF%D8%B1%D9%88%D9%8A%D8%AF/

 

اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ

#9

السلام عليكم :

هذه أول مشاركة لي في هذا الموقع الذي لم أكن أتخيل وجود مثيل له باللغة العربية.

أحببت أن أساهم بحل آخر لم يذكره أحد و يبدو أن سبب المشكلة لم يلاحظه أحد , السبب أن الكود الذي كتبته يستخدم thread واحد و لا يمكن معالجة أكثر من تعليمة في نفس الوقت (أي لا يمكن معالجة الحدث timer1.tick أثناء تنفيذ حلقة for ) بهذه الطريقة و إليك الحل (باستخدام التايمرو multi threading):

 
using System.Threading;
int time = 0;
        private void button1_Click(object sender, EventArgs e)
        {
            Thread th = new Thread(new ThreadStart(start));
            th.Start();
            for (int i = 0; i < 200000000; i++) ;                       
            MessageBox.Show(time.ToString());
        }
        void start()
        {
            System.Timers.Timer t = new System.Timers.Timer(1);
            t.Elapsed += new System.Timers.ElapsedEventHandler(t_Elapsed);
            t.Start();                       
        }

        void t_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            time++;
        }

السلام عليكم :

هذه أول مشاركة لي في هذا الموقع الذي لم أكن أتخيل وجود مثيل له باللغة العربية.

أحببت أن أساهم بحل آخر لم يذكره أحد و يبدو أن سبب المشكلة لم يلاحظه أحد , السبب أن الكود الذي كتبته يستخدم thread واحد و لا يمكن معالجة أكثر من تعليمة في نفس الوقت (أي لا يمكن معالجة الحدث timer1.tick أثناء تنفيذ حلقة for ) بهذه الطريقة و إليك الحل (باستخدام التايمرو multi threading):

 
using System.Threading;
int time = 0;
        private void button1_Click(object sender, EventArgs e)
        {
            Thread th = new Thread(new ThreadStart(start));
            th.Start();
            for (int i = 0; i < 200000000; i++) ;                       
            MessageBox.Show(time.ToString());
        }
        void start()
        {
            System.Timers.Timer t = new System.Timers.Timer(1);
            t.Elapsed += new System.Timers.ElapsedEventHandler(t_Elapsed);
            t.Start();                       
        }

        void t_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            time++;
        }
#10

و عليكم السلام

شكرا اخي محمد على ذكر الطريقة و سبب المشكلة

واهلا بك في الفريق العربي

وان شاء الله عضوية ناجحة و مشاركات مفيدة

/index.php/topic/264448-%D8%A7%D9%84%D8%A8%D8%AF%D8%A7%D9%8A%D8%A9-%D9%85%D8%B9-%D8%A7%D9%84%D8%A7%D9%86%D8%AF%D8%B1%D9%88%D9%8A%D8%AF/

 

اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ

#11

شكراً لك أخي على ترحيبك و إن شاء الله نحصل الفوائد الكثيرة مع هذا الفريق الرائع

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