ورود

View Full Version : استفاده از چندین تایمر در دلفی



smt1383
یک شنبه 01 آذر 1388, 09:25 صبح
با سلام
من در برنامه ام مجبورم از تعداد زیادی تایمر استفاده کنم. مثلاً یک تایمر برای نمایش زمان. یک تایمر برای دریافت اطلاعات از پورت سریال (هر یک ثانیه) و چندین تایمر دیگر. می خواستم ببینم آیا این تایمرها به صورت کاملاً مستقل از هم کار می کنند یا نه؟ مثلاً اگر داخل رویداد ontimer یکی از تایمرها باشیم و وقفه تایمر دیگر رخ دهد چه اتفاقی می افتد؟ آیا این درست است که هر تایمر را به صورت یک پروسه مستقل از سایر تایمرها فرض کرد؟

Felony
یک شنبه 01 آذر 1388, 09:37 صبح
هر تایمر رویداد OnTimer مربوط به خودش رو اجرا میکنه و در رویدادهای تایمرهای دیگه هیچ دخالتی نداره .

smt1383
یک شنبه 01 آذر 1388, 11:00 صبح
ممنون. یعنی میشه اینجوری گفت که هر timet یک thraed جداگانه است؟

vcldeveloper
یک شنبه 01 آذر 1388, 12:53 عصر
یعنی میشه اینجوری گفت که هر timet یک thraed جداگانه است؟
نه، تایمر استفاده شده در TTimer هیچ تضمینی نمیده که دقیقا در فاصله زمانی تعیین شده رویداد OnTimer را فراخوانی کنه.
هر شی از TTimer یک پنجره مخفی داره که پیام WM_TIMER از ویندوز به صف پیام های آن پنجره ارسال میشه. پردازش این پیام توسط آن پنجره تابع دو فاکتور هست، یکی تعداد و نوع پیام هایی که قبل از این پیام در صف پیام های آن پنجره قرار دارند، و باید قبل از آن پردازش بشند؛ دوم حجم پردازش ها در Threadایی که این پنجره ها توسط آن ساخته شدند.

عامل اول زیاد تاثیر گزار نیست، چون این پنجره های مخفی فقط برای دریافت WM_TIMER استفاده میشند، پس پیام های چندانی به آنها ارسال نمیشه، مگر اینکه Interval را خیلی کوچک بگیرید، و متناسب با حجم پردازش های شما نباشه، و تعداد زیادی پیام WM_TIMER در صف انباشته بشند.

عامل دوم مهم هست، چون به تناسب اینکه در لحظه دریافت WM_TIMER برنامه شما در حال انجام چه پردازشی هست، میتونه زمان پردازش پیام WM_TIMER را به تاخیر بیاندازه.

smt1383
یک شنبه 01 آذر 1388, 12:57 عصر
ممنون آقای کشاورز
با این وجود پیشنهاد شما اینه که از thread استفاده کنم؟

smt1383
سه شنبه 03 آذر 1388, 09:48 صبح
آقای کشاورز
با این پاسخی که شما داده اید پس استفاده ار تایمر برای نمایش ساعت خیلی مناسب و دقیق نیست. درسته؟

Mask
سه شنبه 03 آذر 1388, 18:56 عصر
اگه مجبوريد از تايمر در برنامتون استفاده كنيد از كامپوننت thraed timer آقاي سالار خليل زاده استفاده كنيد. براي هر تايمر يه ترد جدا ايجاد ميشه.
اگه پيدا نكرديد بگيد براتون بزارم.

alinikaein
سه شنبه 03 آذر 1388, 23:35 عصر
اگه مجبوريد از تايمر در برنامتون استفاده كنيد از كامپوننت thraed timer آقاي سالار خليل زاده استفاده كنيد. براي هر تايمر يه ترد جدا ايجاد ميشه.
اگه پيدا نكرديد بگيد براتون بزارم.

مي‌شه لينك بديد؟

vcldeveloper
سه شنبه 03 آذر 1388, 23:44 عصر
آقای کشاورز
با این پاسخی که شما داده اید پس استفاده ار تایمر برای نمایش ساعت خیلی مناسب و دقیق نیست. درسته؟
برای نمایش ساعت مناسب هست، مگر اینکه شما قصدتان نمایش واحدهای بسیار کوچک ساعت مثل هزارم ثانیه باشه، و گرنه ساعت معمولی با دقت یک ثانیه کار میکنه، و یک ثانیه زمان زیادی محسوب میشه.