ضمن احترام و گران قدر دانستن نظر تمامی دوستان، بهتر از برخی ابهام ها در تاپیک رو این طوری توضیح دهم:
تایمر ها سرعت برنامه را کم نمی کنند، بلکه Thread اصلی که به فرم یا object جاری اختصاص داده شده است را زمان بند می کنند. در صورتی هم که Thread جاری کاملا درگیر باشد، به علت event محور بودن، فایر نمی شوند. در صورتیکه تعداد زمان بند ها در یک Thread افزایش یابد، حالتی شبیه round robin به وجود می آید( آن چیزی که در OS باعث می شود فکر کنیم همه ی کار ها با هم انجام می شود.) به وجود آوردن چنین حالتی در Thread اصلا کار اصولی نیست. در این حالت است که جمله ی بیان شده مبنی بر کند کردن توسط تایمر پر رنگ می شود،
کند خیر، ناهمگون می شود! چون مدت زمان اجرای Timer ها کلا وابسته به هم می شود.
دقیقا. به همین علت است. در ضمن مگر قبلا چند تایمر داشته اید که یک تایمر برنامه ی شما را در این حالت ببرد؟
ضمن اینکه این جمله
ممکن است در
اینجا صحیح باشد، این جمله در همه جا صحیح نیست. هر کدام جهت کاری مناسب هستند. همان طور که در بالا بیان شد، تایمر زمان بند است و Thread ها مجموعه دستورات اجرایی به صورت موازی. از نظر تعریفی این دو با هم وجه تشابهی ندارند و در توضیح تکمیلی می توان گفت که Thread می تواند زمان بندی شود و مانند تایمر کار کند(مانند مثال علی آقا)
سوال اصلی) آیا Thread دیگری را زمان بند کنیم بهتر است یا Thread جاری را Time Slice کنیم؟
اگر قرار است وظیفه ای طولانی را در زمان بند های خود اجرا کنیم، طوری که درگیری کد طوری باشد که زمان بندی بخش های دیگر را تحت تاثیر قرار دهد، قطعا روش زمان بندی Thread بهتر از Timer است. در غیر این صورت روش Timer بهتر است. چرا؟
1- ایجاد هر Thread و حذف آن یک بار پردازشی بر روی OS دارد.
2- به ازای هر Thread که ایجاد می شود یک Stack Watermark ایجاد می شود.
3- به ازای هر Thread که ایجاد می شود ده ها پراپرتی می بایست sync شوند.
4- در صورت نیاز، دسترسی Thread ها به حافظه ی private هر Thread دیگر باید توسط invoke انجام شود.
و ...
تمامی این موارد از نظر بهینه بودن حافظه و پردازش خود یک سوال ایجاد می کند. و در این جا دیگر نمی توان گفت استفاده از Thread حرفه ای تر است!
با توجه به مطالب بیان شده، آیا برای نمایش یک فرم نیاز است تا Thread ایجاد شود؟
این سوال دو پاسخ دارد:
1- اگر فرم طوری نمایش داده شود و رفتار Modal (غیر فعال شدن فرم جاری(parent) و فعال شدن فرم جدید مد نظر) داشته باشد، آنگاه Thread الزامی است.
2- اگر فرم باز شونده رفتار Modal نداشته باشد، آنگاه با توجه به بار پردازشی کم، به Thread جدیدی نیاز نیست.
این خط
احتمال خطا دارد. متغیر عمومی که بدین صورت تعریف شود نمی تواند Thread Safe باشد. می بایست متغیر volatile نیز باشد.
ThreadSafe: دسترسی همزمان به یک نباید باعث خطا در خواندن و نوشتن و یا تاخیر در آن شود.
مثال با تایمر این عمل را روی وین فرم، در
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
می توانید دریافت کنید. (کد نوشته شده بسیار کثیف است، حال نداشتم



)
موفق باشید.