PDA

View Full Version : ساخت تایمر



1485159
سه شنبه 18 خرداد 1389, 11:27 صبح
سلام
من میخوام بدون استفاده از تایمر(امکان استفاده نیست)هر میلی ثانیه به متغیرم یک واحد اضافه کنم! چطوری؟

حسین شهریاری
سه شنبه 18 خرداد 1389, 12:02 عصر
سلام

تابع Sleep برای تولید وقفه هست و ورودی آن نیز بر اساس میلی ثانیه هست. میتونی بنا بر شرایط برنامه خودت ازش بهره ببری.
مثلا قطعه کد زیر بعد از 100 میلی ثانیه به برنامه خاتمه میده:

Sleep(100);
Application.Terminate;
موفق باشید

1485159
سه شنبه 18 خرداد 1389, 12:17 عصر
نه اینطوری نمیخوام.
میخوام مثلا هر 1 میلی ثانیه یه کار خاصی انجام بدم بودن اینکه برنامه متوقف بشه.

vcldeveloper
سه شنبه 18 خرداد 1389, 12:41 عصر
میخوام مثلا هر 1 میلی ثانیه یه کار خاصی انجام بدم بودن اینکه برنامه متوقف بشه.
باید اون کد رو در یک Thread مجزا اجرا کنید.

مصطفی ساتکی
سه شنبه 18 خرداد 1389, 12:58 عصر
البته بایستی priority مربوط به Thread رو هم تنظیم کنی.

حسین شهریاری
سه شنبه 18 خرداد 1389, 13:39 عصر
میشه دقیقا صورت مسئله را بفرمایید؟ شاید بهتر بشه راهنمایی کرد!
چرا از تایمر نمیشه استفاده کرد؟

مصطفی ساتکی
سه شنبه 18 خرداد 1389, 14:09 عصر
چرا از تایمر نمیشه استفاده کردچون تایمر در thread اصلی برنامه کارشو انجام میده .کار درست همونیه که آقای کشاورز فرمودند یه Thread مجازا .برنامه نویس راحت میتونه رویه مورد نظر خودشو Synchornize هم کنه البته بایستی priority رو هم در نظر بگیره چون فرمودند یک میلی ثانیه.
یه راه حل دیگه اینه که از Multimedia Timer استفاده کنه که خودش در یه thread مجزا run میشه.
کدش هم به صورت زیر استفاده میشه.
uses MMSystem;

var Timerhandle : Integer;
procedure TimerCallBack(ATimerID ,AMsg : LongWord;ADWUser ,ADw1,ADw2 :DWORD);
begin
Beep;
end;
procedure TForm1.btn1Click(Sender: TObject);
begin
Timerhandle := timeSetEvent(1,0,@TimerCallBack,0,TIME_PERIODIC);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
timeKillEvent(Timerhandle);
end;

Saeed_m_Farid
سه شنبه 18 خرداد 1389, 14:34 عصر
البته بایستی priority مربوط به Thread رو هم تنظیم کنی.
چرا؟ میشه دلیل بگین؟
بدون اولویت چه مشکلی پیش میاد؟

1485159
سه شنبه 18 خرداد 1389, 15:30 عصر
باید اون کد رو در یک Thread مجزا اجرا کنید.
و بعدش از sleep توی ترد مورد نظر استفاده کنم؟

البته بایستی priority مربوط به Thread رو هم تنظیم کنی.
یعنی چی؟

کدش هم به صورت زیر استفاده میشه.
این کد کار نمیکنه! بعد از اجرای برنامه ارور میده

مصطفی ساتکی
سه شنبه 18 خرداد 1389, 16:13 عصر
چرا؟ میشه دلیل بگین؟
بدون اولویت چه مشکلی پیش میاد؟ برای اینکه TTimer در واقع SetTimer رو encapsulateکرده و برای بازهای زمانی پایین که در شبیه سازی از اونها استفاده میشه اون دقت لازم (Priority ) رو نداره .Multi Media Timer در یک thread مجزا و با priority بالا عمل میکنه.