PDA

View Full Version : بدست آوردن زمان کنونی timer



rmb_ali
چهارشنبه 23 آبان 1386, 13:18 عصر
آیا راهی هست که بشه زمان سژری شده یه تایمر رو بدستآورد و یا اینکه بفهمیم که چقدر به زمان اجرای ontimer مونده

manvaputra
چهارشنبه 23 آبان 1386, 13:35 عصر
سلام توی همون رویداد ontimer می تونی با ستفاده از چند خط کد ساده بفهمی چقدر سپزی شده

Mahmood_M
چهارشنبه 23 آبان 1386, 20:38 عصر
سلام
شما با استفاده از تابع GetTickCount میتونید میلی ثانیه های سپری شده از شروع ویندوز تا کنون رو بدست بیارید ...
( حالا چه ربطی داره ؟ ! )

مراحل ساخت یک همچین برنامه ای :
1. یک دکمه برای شروع کار روی فرم بزارید ...
2. دو تا Timer روی فرم بزارید ( یکی Timer اصلی که باید زمان باقیمانده برای اجرای OnTimer اون چک بشه ( Timer یک ) و یک Timer هم برای چک کردن زمان باقیمانده ( Timer دو ) )
3. 4 تا متغیر عددی تعریف کنید ( دو تا برای گرفتن و محاسبه تفاوت مقدار برگشتی تابع GetTickCount ( مثلا T1 و T2 )، یکی دیگه برای مشخص کردن زمان سپری شده ( مثلا Progress ) یکی دیگه هم برای مشخص کردن تعداد دفعات اجرای OnTimer تایمر اصلی ( مثلا N ) )
در OnClick مربوط به دکمه شروع ، مقدار T1 رو برابر با GetTickCount قرار بدید و Timer ها رو فعال کنید ( در زمان اجرا فعال نباشن بهتره )
در OnTimer مربوط به ، Timer دو ، ابتدا T2 رو برابر با GetTickCount قرار بدید و بعد متغیر Progress رو برابر با " T2 - T1 " ( مقدار T2 منهای مقدار T1 ) قرار بدید تا تعداد میلی ثانیه های گذشته از زمان آخرین اجرای OnTimer تایمر اصلی بدست بیاد ...
در OnTimer مربوط به Timer‌یک ابتدا Progress رو برابر با 0 قرار بدید ، بعد یک مقدار به مقدار N اضافه کنید و بعد مقدار T1 رو برابر با مقدار GetTickCount قرار بدید ...

محاسبه زمان باقیمانده :
در OnTimer مربوط به " Timer دو " یک متغیر ( مثلا E‌ ) از نوع Extended تعریف کنید و بعد در آخر عملیات این تابع مقدار اون رو برابر با " Progress - تقسیم بر - مقداری که میخواید به عنوان زمان باقیمانده داشته باشد " قرار بدید ...
مثلا فرض کنید Timer اصلی Interval اش برابر با " 10000 " ( 10 ثانیه ) هست و میخواید تعداد ثانیه های باقیمانده تا 10 ثانیه رو بدست بیارید ، برای این کار باید Progress رو تقسیم بر 1000 بکنید‌ ، چون مقدار Progress بر حسب میلی ثانیه هست ...

در آخر هم میتونید مقدار متغیرها رو روی Label ( یا ... ) نشون بدید ...

به عنوان نکته آخر باید بگم که بدون GetTickCount هم میشه اما باید در OnTimer خود تایمر مثلا یک متغیر رو مقدارش رو هی اضافه کنید تا موقع اجرای OnTimer تایمر بعدی ، اما چون خود این عملیاتها ، یعنی اضافه کردن مقدارها در هر OnTimer خودش چند میلی ثانیه ( یا کمتر ) زمان می بره ، برای همین زمان رو دقیق بدست نمی یارید ، پس بهتره از GetTickCount استفاده کنید )

مطمئنا توضیحات من زیاد جالب نبود ، راستش یه خورده پیچیده شد ...
برای اینکه کاملا متوجه بشید این برنامه نمونه رو براتون گذاشتم :

دانلود برنامه نمونه (http://nabegheh.parsaspace.com/Examples/Timer.rar)

موفق باشید ...