سلام
فرق ریسمان های Foreground با Background در چیست؟
با تشکر
سلام
فرق ریسمان های Foreground با Background در چیست؟
با تشکر
|
سلام!
ریسمان Foreground و Background هر دو یک چیزن و فقط یک تفاوت با هم دارن و اون اینه که اگر ریسمان Background باشه، زمانی که برنامه بسته بشه، ریسمان هم باهاش بسته میشه. در حالی که اگر ریسمان Foreground باشه، با ارسال دستور بسته شدن برنامه، ریسمان همچنان به کار خودش ادامه میده و به شکلی از بسته شدن برنامه ی اصلی جلوگیری می کنه و برنامه زمانی خاتمه پیدا می کنه که کار ریسمان های Foreground به پایان برسه. لازم به ذکره که در .NET ریسمان هایی که تعریف میشن به طور پیش فرض از نوع Foreground هستن.
موفق باشید
آرمینبرای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید
'چو ایران نباشد، تن من مباد
Dim Armin As Iranian
If Iran.Enabled = False Then Armin.Enabled = False
سلام
ببخشید منظور از بسته شدن برنامه چیست؟ خوب وقتی برنامه بسته بشه اما ترد خاتمه پیدا نکنه چه فایده؟
من راستش نگرفتم درست. برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید
سلام!
بسته شدن برنامه به این معنا است که روی فرم اصلی برنامه روی ضربدر Close کلیک کنید.
اگر یک Foreground Thread مربوط به فرم اصلی در حال اجرا باشه و شما در این حالت فرم اصلی رو Close کنید، فرم بسته میشه ولی اگر Task Manager رو باز کنید می بینید همچنان پروسه ی برنامه در حافظه مقیم و در حال فعالیت هست.
و یه نمونه از فایده اش...
در نرم افزار های تجاری و مالی که نیازه پردازش های به روز رسانی پایگاه داده ی مالی به طور کامل انجام بشه از Foreground Thread استفاده می کنن. در این صورت اگر کاربری برنامه ی مدیریت مالی رو اشتباهی ببنده گرچه فرم برنامه بسته میشه ولی فرآیند به روز رسانی که خیلی مهمه خاتمه پیدا نمی کنه. در این حالت فرآیند برنامه زمانی پایان می پذیره که کار به روزرسانی تموم بشه. در نظر داشته باشید که اگر از Background Thread استفاده می کردیم با بسته شدن فرم اصلی، فرآیند به روزرسانی هم ممکن بود ناتمام باقی بمونه و سبب مشکلات جدی بشه.
موفق باشید
آرمینبرای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید
'چو ایران نباشد، تن من مباد
Dim Armin As Iranian
If Iran.Enabled = False Then Armin.Enabled = False
سلام
زحمت کشیدی متوجه شدم.
اما من برای تست 60 ترد ایجاد کردم اما در Task Manager ویندوز هیچ تردی ای اضافه نشد . الان 980 ترد هست . 60 تا هم ایجاد میکنم تغیر نمی کند.
بعید می دونم...
نکته ی اول اینه که مقدار ریسمان های جاری سیستم عامل اصلا" مقدار ثابتی نیست و در کسری از ثانیه تغییر می کنه. به عبارتی به دلیل سر و کار داشتن فرآیند های مختلف به خصوص فرآیند های سیستمی با منابع مختلف ، تعداد ریسمان دائما" تغییر می کنه.
نکته بعدی اینه که خود برنامه اگر به طور دستی بهش ریسمانی اضافه نشده باشه بسته به ساختارش چندین ریسمان رو اجرا می کنه. در نتیجه شما حتی اگر ریسمانی رو اضافه نکرده باشید، با اجرای خود برنامه باید تعداد ریسمان ها تغییر بکنه.
بنده شخصا" با افزایش تعداد ریسمان های یک برنامه ی آزمایشی، چندین ثانیه بعد شاهد افزایش تعداد Thread های اون برنامه در ابزار Resource Monitor ویندوز بودم و اصلا" با پدیده ای که شما توصیف می کنید رو به رو نشدم.
'چو ایران نباشد، تن من مباد
Dim Armin As Iranian
If Iran.Enabled = False Then Armin.Enabled = False
|
1 کاربر در حال مشاهده این موضوع. (0 عضو و 1 میهمان)
Bookmarks