ورود

نسخه کامل مشاهده نسخه کامل : بسته شدن سریع برنامه و عدم اجرای کامل آن در ریسمان های BackGround



Life24
09-08-2013, 09:58
سلام
تفاوت این دو ریسمان در چیست؟ bakcground و foreground?
چرا برنامه سریعا در background بسته میشه و فقط 1 اجرا میشود؟



برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

Msba
09-08-2013, 10:59
بحث راجب برنامه ی شما در ادامه.اما:زمانی که یک Thread دارای خاصیت Background شود بدین معناست که اگر Thread مربوط به پروسس اصلی بسته شود این Thread دوم که Background دارد مانع آن نمی شود. یعنی اولویت اتمام ندارد. فرض کنید در یک Thread قرار است یک محاسبه انجام شود و حاصل آن توسط Thread اصلی استفاده شود. خوب اگر Thread اصلی توسط کاربر بسته شود آنگاه نیاز هست تا پروسس منتظر اتمام محسابات Thread دیگر باشد؟ مطمئنا خیر. پس Thread مربوط به محاسبات می تواند از نوع Backgound باشد. اینگونه بهینه تر است.در مورد برنامه ی شما هم دقیقا قضیه همین است.شما برنامه را اجرا کنید و هیچ کلیدی نزنید. برنامه کاملا کار می کند. اما با زدن کلید پروسس Thread شما را بلا استفاده دیده و بلافاصله برنامه را می بندند.موفق باشید.

Life24
09-08-2013, 22:51
بحث راجب برنامه ی شما در ادامه.اما:زمانی که یک Thread دارای خاصیت Background شود بدین معناست که اگر Thread مربوط به پروسس اصلی بسته شود این Thread دوم که Background دارد مانع آن نمی شود. یعنی اولویت اتمام ندارد. فرض کنید در یک Thread قرار است یک محاسبه انجام شود و حاصل آن توسط Thread اصلی استفاده شود. خوب اگر Thread اصلی توسط کاربر بسته شود آنگاه نیاز هست تا پروسس منتظر اتمام محسابات Thread دیگر باشد؟ مطمئنا خیر. پس Thread مربوط به محاسبات می تواند از نوع Backgound باشد. اینگونه بهینه تر است.در مورد برنامه ی شما هم دقیقا قضیه همین است.شما برنامه را اجرا کنید و هیچ کلیدی نزنید. برنامه کاملا کار می کند. اما با زدن کلید پروسس Thread شما را بلا استفاده دیده و بلافاصله برنامه را می بندند.موفق باشید.

سلام
اول سپاس از پاسخ شما و این تقدیم به شما :n16:
منظور شما این هست؟
console.readkey(); ??? این رو خودم اضافه کردم و بعد فهمیدم نیاز نیست و // کردمش. بدون کلید زدن.و هیچ کاری اگر ترد را بک گراند بزاریم 1 رو چاپ میکنه و سریع می بنده برنامه رو.

_H2_
10-08-2013, 23:21
سلام
جواب دوستمان Msba کاملاً صحیح است ولی بظاهر برخی دوستان کمی به توضیحات بیشتر نیاز دارند ...

اگر ریسمان شما Background باشد، به این معنی است که با اتمام Process (یا برنامه) خواسته اید آن ریسمان در هر مرحله ای از کارش که باشد Abort و متوقف شود.
در مقابل اگر ریسمان Foreground باشد، یعنی خواسته اید برنامه قبل از اتمام و جمع آوری کلی حافظه، منتظر بماند تا کار ریسمان مورد نظر تمام شود.

درواقع اینجا، ریسمانی که Process توسط سیستم عامل با آن آغاز شده و همان که main را اجرا میکند مهم است، سیستم عامل Process و منابع و حافظه را در ارتباط با این ریسمان زنده نگاه میدارد.
میتوان گفت، این ریسمان اگر به انتهای main برسد منتظر اتمام ریسمان های Foreground میماند ولی در آخر همه ریسمان های Background را هم با خودش نابود میکند.


خلاصه:
ریسمان شما Background باشد با رسیدن ریسمان اصلی که main را اجرا میکند به انتهای main همه چیز تمام میشود.