تور لحظه آخری
امروز : یکشنبه ، 15 مهر 1403    احادیث و روایات:  امام صادق (ع):خداوند روزه را واجب كرده تا بدين وسيله دارا و ندار (غنى و فقير) مساوى گردند.
سرگرمی سبک زندگی سینما و تلویزیون فرهنگ و هنر پزشکی و سلامت اجتماع و خانواده تصویری دین و اندیشه ورزش اقتصادی سیاسی حوادث علم و فناوری سایتهای دانلود گوناگون شرکت ها




آمار وبسایت

 تعداد کل بازدیدها : 1821123115




هواشناسی

نرخ طلا سکه و  ارز

قیمت خودرو

فال حافظ

تعبیر خواب

فال انبیاء

متن قرآن



اضافه به علاقمنديها ارسال اين مطلب به دوستان آرشيو تمام مطالب
archive  refresh

همه چيز در مورد Theard ها ( تمامي سوالات و بحث ها در اين تاپيك )


واضح آرشیو وب فارسی:سایت ریسک: Morteza_SOS22-01-2009, 07:52 AMراستش من اصلا كار با Theard ها را بلد نيستم لذا از دوستان مي خوام كه اگر ممكن است در مورد سوالات زير كه براي اكثر ماها پيش مي ياد يه توضيح بدهند : 1-چگونه يك يا چند Theard بسازم يا سرعت هاي متفاوت و نام هاي دلبخواه ؟ 2-چگونه هر Theard را Pause كنم يا متوقف كنم و دوباره فعال كنم ؟ 3-چگونه Theard را از طريق برنامه ام از بين برده يا خراب كنم ؟ 4-چگونه مي توانم Theard دلخواهم را كنترل كنم مثلا مي خواهم هنگامي كه Button دلخواهم كليك شد مثلا Theard 1 دستورات Button مذكور را اجرا كند نه خود Button !!! يعني محتويات Button داخل Theard باشد و اگر Theard مرده بود يا از بين رفته بود يا متوقف شده بود يه پيغام نشون بده ؟ 5-چگونه مي توان تشخيص داد كه Theard فعال هست يا خير ( متوقف شده يا خير ) ؟ 6-آيا مي توان Theard مخفي ساخت ؟ ( آيا Theard ها قابل مشاهده توسط يوزر هستند ؟) . 7-آيا مي توان Theard ي ساخت كه بعد از مدتي مشخص از بين برود يا فعال شود يا دستوري خاص را اجرا كند ؟ ( مثل تايمر ) 8-آيا مي توان Theard ي ساخت كه به هيچ عنوان از حافظه خارج نشود مگر توسط برنامه ي خودش ؟ 9-چگونه مي توان توسط هر Theard يك شي از فرم يا پروژه يمان را كنترل كرد مثلا مي خواهم هنگامي كه كاربر Button1 را كليك كرد Theard 1 اجرا بشه و دستورات مورد نظرم را اجرا كند و بعد از اجراي دستورات دوباره متوقف شود ؟ *Batman*22-01-2009, 08:03 AMسلام مرتضی جان. بیا اینو بخون. فارسیه. جواب خیلی از سوالات اونجاست. !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! این مقاله بهت کمک میکنه اولین Thread خودت رو درست کنی. بحث همزمان سازی یا synchronization را هم گفته. اما درمورد سوال 6 فکر نکنم بشه Thread ها را به راحتی مخفی کرد.با دیباگرها میشه Thread های برنامه را دید. در مورد سوال 8 هم باید بگم این کار امکان پذیره . منتها حواست باشه چون ممکنه CPU منفجر بشه . اونم قابل کنترله. موفق باشی. Morteza_SOS23-01-2009, 05:01 AMممنون ولي من هنوز با ساختنش مشكل دارم مي شه يه سورس قرار بديد براي موارد بالا ؟ اين مقاله هم خيلي خوب بود فقط اي كاش سورسش را هم مي گذاشتيد ( سورس مواردي كه در مقاله آموزش داده شده بود )‌ ! VDeveloper05-02-2009, 02:06 AMآيا مي توان Theard ي ساخت كه به هيچ عنوان از حافظه خارج نشود مگر توسط برنامه ي خودش ؟ در حالت عادی هم همین اتفاق میافته، و Thread از حافظه خارج نمیشه. البته همیشه کاربری که سطح دسترسی Admin داشته باشه، میتونه با فراخوانی تابع TerminateThread، یک Thread را متوقف کنه. در مورد سوال 8 هم باید بگم این کار امکان پذیره . منتها حواست باشه چون ممکنه CPU منفجر بشه . این جواب ربطی به سوال بالا نداره. بودن Thread در حافظه ربطی به CPU نداره. سیستم عامل همواره لیستی از Threadهای در حال اجرا را در یک صف نگهداری میکنه، و به ترتیب کنترل CPU را برای یک مدت زمان معین به تک تک آنها میده. هر زمان که وقت یک Thread تمام شد، سیستم عامل به زور کنترل CPU را از آن Thread میگیره و به Thread بعدی میده. اون Thread هم اگر کارش تمام نشده باشه، به انتهای صف منتقل میشه و منتظر میمانه تا نوبتش برسه. این کار در فاصله زمانی بسیار کوتاهی انجام میشه، و کاربر تصور میکنه که برنامه ها بطور همزمان در حال اجرا هستند. Threadایی که احتیاج به زمان بیشتری داشته باشه، یا کارش مهم تر باشه، میتونه Priority خودش را متناسب با Priority مربوط به Process خودش، بالاتر ببره. البته در User Mode همیشه Thread مربوط به مدیر حافظه ویندوز بالاترین سطح priority را داره تا هر وقت لازم شد، بتونه کنترل CPU را از Threadهای دیگه بگیره. 7-آيا مي توان Theard ي ساخت كه بعد از مدتي مشخص از بين برود يا فعال شود يا دستوري خاص را اجرا كند ؟ ( مثل تايمر ) بله. 4-چگونه مي توانم Theard دلخواهم را كنترل كنم مثلا مي خواهم هنگامي كه Button دلخواهم كليك شد مثلا Theard 1 دستورات Button مذكور را اجرا كند نه خود Button !!! يعني محتويات Button داخل Theard باشد و اگر Theard مرده بود يا از بين رفته بود يا متوقف شده بود يه پيغام نشون بده ؟ تصوری که از مفهوم Thread دارید اشتباه هست. Thread یک مسیر اجرای کد هست. هر برنامه حداقل یک Thread داره که Thread اصلی برنامه هست. Thread اصلی برنامه مسئول کنترل رابط گرافیکی کاربر هست. وقتی شما یک Thread جدید درست می کنید، در واقع یک مسیر اجرای جدید ایجاد می کنید. سیستم عامل براساس Threadها CPU را زمان بندی میکنه، نه بر اساس برنامه ها، پس اگر برنامه ایی Threadهای فعال بیشتری داشته باشه، میتونه سهمش از رمان CPU را افزایش بده. مثل این هست که شما در یک اتوبان در یک ترافیک سنگین گیر کرده باشید، اگر تعداد لاین های اتوبان افزایش پیدا کنه، ماشین های بیشتری می تونند به طور همزمان از اتوبان عبور کنند. حالا اگر شما چند ماشین داشته باشید، در یک جاده تک بانده، همه ماشین های شما در ترافیک گیر می کنند، ولی در یک جاده دو یا چند بانده، اگر در یک باند هم ترافیک ایجاد بشه، سایر باندها هنوز آزاد هستند، پس اگر شما چند ماشین داشته باشید که هر کدام در یک باند حرکت می کنند، اگر یکی از ماشین ها در ترافیک گیر کنه، سایر ماشین ها می تونند همچنان به حرکت خودشان ادامه بدند. *Batman*05-02-2009, 04:03 AMسلام . طبق معمول اشتباه از ما،تصحیح از شما. سوال: متد Execute تو Thread ما به پایان میرسه.اما Thread رو آزاد نکردیم(برنامه هم بسته نشده) آیا در این حالت میشه بازم متد Execute رو اجرا کنیم یا باید حتما یه شی جدید بسازیم؟ یه سوال دیگه: اگر Thread را آزاد نکرده باشیم و برنامه هم درحال اجرا باشه،سیستم عامل با اون Thread چطور برخورد میکنه؟ با تشکر فراوان. VDeveloper05-02-2009, 12:58 PMمتد Execute تو Thread ما به پایان میرسه.اما Thread رو آزاد نکردیم(برنامه هم بسته نشده) آیا در این حالت میشه بازم متد Execute رو اجرا کنیم یا باید حتما یه شی جدید بسازیم؟ خیر. کلاس TThread دلفی صرفا یک Wrapper برای Threadهای ویندوز هست. وقتی متد Execute به پایان میرسه، Thread ویندوزی که ساخته شده بود هم از کار میافته، و باید یک نمونه جدید از TThread ساخته بشه. برای تسهیل در کار آزاد سازی شی ساخته شده از TThread، بعد از پایان Execute، می تونید خصوصیت FreeOnTerminate آن را True کنید، تا بعد از پایان یافتن Execute، اون شی از TThread هم آزاد بشه. اگر می خواید که Thread پایان پیدا نکنه، باید در Execute یک حلقه بی نهایت داشته باشید که در مواقع عادی Thread را به خواب ببره، و در زمانی که کاری برای Thread بوجود آمد، آن کار را انجام بده. اگر Thread را آزاد نکرده باشیم و برنامه هم درحال اجرا باشه،سیستم عامل با اون Thread چطور برخورد میکنه؟ به ظاهر برنامه بسته میشه، ولی اگر Task Manager را باز کنید، می بینید که تا زمانی که اجرای Thread تمام نشده، Process همچنان در حافظه هست. برای جلوگیری از این کار، باید قبل از پایان برنامه به Thread اطلاع داده بشه که کارش را تموم کنه، برنامه هم صبر کنه تا Thread کارش تمام بشه، بعد خارج بشه. موفق باشید picher_s07-02-2009, 11:20 AMسلام عزیزان. اگه کسی سرسی چیزی در مورد Mutex ها هم داره لطفا همینجا بزاره آخه میفکرم به هم ربط داشته باشن. ممنون. F A R H A D07-02-2009, 02:29 PMسلام عزیزان. اگه کسی سرسی چیزی در مورد mutex ها هم داره لطفا همینجا بزاره آخه میفکرم به هم ربط داشته باشن. ممنون. سلام. خیر دوست عزیز ارتباطی ندارند. قبلا سورس کامل گذاشته شده. جستجو کنید VDeveloper07-02-2009, 05:21 PMاگه کسی سرسی چیزی در مورد Mutex ها هم داره لطفا همینجا بزاره آخه میفکرم به هم ربط داشته باشن. خیر دوست عزیز ارتباطی ندارند. ربط دارند. Mutex ها یکی از انواع مختلف Synchronization Objects هستند که سیستم عامل برای همزمان سازی بین Threadها ارائه میکنه. Mutex ها در برابر Critical Sectionها سربار بیشتری به برنامه تحمیل می کنند، ولی این قابلیت را دارند که بین چند Process به اشتراک گذاشته بشند. Critical Section را فقط می توان در داخل یک Process استفاده کرد. برای اطلاعات بیشتر، باید درباره مبحث Thread Synchronization یا Synchronization Objects تحقیق کنید. F A R H A D07-02-2009, 08:07 PMممنون اطلاعات کاملی بود. این هم برای دوستان عزیز: !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! Morteza_SOS13-02-2009, 07:20 AMدوستان لطفا از تمامي مباحث ذكر شده در بالا نمونه سورس قرار بديد . picher_s13-02-2009, 01:02 PMسلام. پیشنهاد (در تحقیقات) من استفاده از Component JvThread هست که در مجموعه JCL+JVC وجود داره . مثالش هم همراهشه. اینم یه سورس که دلیل استفاده از Thraed ها رو میگه: !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! با تشکر از فرهاد موفق و پیروز باشی. سایت ما را در گوگل محبوب کنید با کلیک روی دکمه ای که در سمت چپ این منو با عنوان +1 قرار داده شده شما به این سایت مهر تأیید میزنید و به دوستانتان در صفحه جستجوی گوگل دیدن این سایت را پیشنهاد میکنید که این امر خود باعث افزایش رتبه سایت در گوگل میشود




این صفحه را در گوگل محبوب کنید

[ارسال شده از: سایت ریسک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 610]

bt

اضافه شدن مطلب/حذف مطلب




-


گوناگون

پربازدیدترینها
طراحی وب>


صفحه اول | تمام مطالب | RSS | ارتباط با ما
1390© تمامی حقوق این سایت متعلق به سایت واضح می باشد.
این سایت در ستاد ساماندهی وزارت فرهنگ و ارشاد اسلامی ثبت شده است و پیرو قوانین جمهوری اسلامی ایران می باشد. لطفا در صورت برخورد با مطالب و صفحات خلاف قوانین در سایت آن را به ما اطلاع دهید
پایگاه خبری واضح کاری از شرکت طراحی سایت اینتن