تبلیغات :
ماهان سرور
آکوستیک ، فوم شانه تخم مرغی ، پنل صداگیر ، یونولیت
دستگاه جوجه کشی حرفه ای
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




صفحه 1 از 2 12 آخرآخر
نمايش نتايج 1 به 10 از 12

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

  1. #1
    پروفشنال Morteza_SOS's Avatar
    تاريخ عضويت
    Apr 2006
    پست ها
    577

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

    راستش من اصلا كار با 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 اجرا بشه و دستورات مورد نظرم را اجرا كند و بعد از اجراي دستورات دوباره متوقف شود ؟
    Last edited by Morteza_SOS; 22-01-2009 at 07:54. دليل: اضافه كردن مورد آخر...

  2. 2 کاربر از Morteza_SOS بخاطر این مطلب مفید تشکر کرده اند


  3. #2
    حـــــرفـه ای *Batman*'s Avatar
    تاريخ عضويت
    Dec 2005
    محل سكونت
    Virtual Environment
    پست ها
    5,203

    پيش فرض

    سلام مرتضی جان.
    بیا اینو بخون. فارسیه. جواب خیلی از سوالات اونجاست.

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    این مقاله بهت کمک میکنه اولین Thread خودت رو درست کنی.
    بحث همزمان سازی یا synchronization را هم گفته.

    اما درمورد سوال 6 فکر نکنم بشه Thread ها را به راحتی مخفی کرد.با دیباگرها میشه Thread های برنامه را دید.

    در مورد سوال 8 هم باید بگم این کار امکان پذیره .
    منتها حواست باشه چون ممکنه CPU منفجر بشه . اونم قابل کنترله.

    موفق باشی.

  4. 4 کاربر از *Batman* بخاطر این مطلب مفید تشکر کرده اند


  5. #3
    پروفشنال Morteza_SOS's Avatar
    تاريخ عضويت
    Apr 2006
    پست ها
    577

    پيش فرض

    ممنون ولي من هنوز با ساختنش مشكل دارم مي شه يه سورس قرار بديد براي موارد بالا ؟
    اين مقاله هم خيلي خوب بود فقط اي كاش سورسش را هم مي گذاشتيد ( سورس مواردي كه در مقاله آموزش داده شده بود )‌ !

  6. #4
    داره خودمونی میشه
    تاريخ عضويت
    Feb 2008
    پست ها
    161

    پيش فرض

    آيا مي توان 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 را افزایش بده. مثل این هست که شما در یک اتوبان در یک ترافیک سنگین گیر کرده باشید، اگر تعداد لاین های اتوبان افزایش پیدا کنه، ماشین های بیشتری می تونند به طور همزمان از اتوبان عبور کنند. حالا اگر شما چند ماشین داشته باشید، در یک جاده تک بانده، همه ماشین های شما در ترافیک گیر می کنند، ولی در یک جاده دو یا چند بانده، اگر در یک باند هم ترافیک ایجاد بشه، سایر باندها هنوز آزاد هستند، پس اگر شما چند ماشین داشته باشید که هر کدام در یک باند حرکت می کنند، اگر یکی از ماشین ها در ترافیک گیر کنه، سایر ماشین ها می تونند همچنان به حرکت خودشان ادامه بدند.

  7. 2 کاربر از VDeveloper بخاطر این مطلب مفید تشکر کرده اند


  8. #5
    حـــــرفـه ای *Batman*'s Avatar
    تاريخ عضويت
    Dec 2005
    محل سكونت
    Virtual Environment
    پست ها
    5,203

    پيش فرض

    سلام .

    طبق معمول اشتباه از ما،تصحیح از شما.

    سوال:

    متد Execute تو Thread ما به پایان میرسه.اما Thread رو آزاد نکردیم(برنامه هم بسته نشده)
    آیا در این حالت میشه بازم متد Execute رو اجرا کنیم یا باید حتما یه شی جدید بسازیم؟

    یه سوال دیگه:

    اگر Thread را آزاد نکرده باشیم و برنامه هم درحال اجرا باشه،سیستم عامل با اون Thread چطور برخورد میکنه؟


    با تشکر فراوان.

  9. #6
    داره خودمونی میشه
    تاريخ عضويت
    Feb 2008
    پست ها
    161

    پيش فرض

    متد 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 کارش تمام بشه، بعد خارج بشه.

    موفق باشید

  10. 2 کاربر از VDeveloper بخاطر این مطلب مفید تشکر کرده اند


  11. #7
    کاربر فعال انجمن نرم افزار picher_s's Avatar
    تاريخ عضويت
    Dec 2008
    محل سكونت
    زیر چتر اویرا در تفریج!
    پست ها
    1,453

    پيش فرض

    سلام عزیزان. اگه کسی سرسی چیزی در مورد Mutex ها هم داره لطفا همینجا بزاره آخه میفکرم به هم ربط داشته باشن.
    ممنون.

  12. #8
    حـــــرفـه ای F A R H A D's Avatar
    تاريخ عضويت
    Aug 2006
    پست ها
    1,383

    پيش فرض

    سلام عزیزان. اگه کسی سرسی چیزی در مورد mutex ها هم داره لطفا همینجا بزاره آخه میفکرم به هم ربط داشته باشن.
    ممنون.
    سلام. خیر دوست عزیز ارتباطی ندارند. قبلا سورس کامل گذاشته شده. جستجو کنید

  13. #9
    داره خودمونی میشه
    تاريخ عضويت
    Feb 2008
    پست ها
    161

    پيش فرض

    اگه کسی سرسی چیزی در مورد Mutex ها هم داره لطفا همینجا بزاره آخه میفکرم به هم ربط داشته باشن.
    خیر دوست عزیز ارتباطی ندارند.
    ربط دارند. Mutex ها یکی از انواع مختلف Synchronization Objects هستند که سیستم عامل برای همزمان سازی بین Threadها ارائه میکنه. Mutex ها در برابر Critical Sectionها سربار بیشتری به برنامه تحمیل می کنند، ولی این قابلیت را دارند که بین چند Process به اشتراک گذاشته بشند. Critical Section را فقط می توان در داخل یک Process استفاده کرد.

    برای اطلاعات بیشتر، باید درباره مبحث Thread Synchronization یا Synchronization Objects تحقیق کنید.

  14. 3 کاربر از VDeveloper بخاطر این مطلب مفید تشکر کرده اند


  15. #10
    حـــــرفـه ای F A R H A D's Avatar
    تاريخ عضويت
    Aug 2006
    پست ها
    1,383

    پيش فرض

    ممنون اطلاعات کاملی بود. این هم برای دوستان عزیز:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

صفحه 1 از 2 12 آخرآخر

Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

برچسب های این موضوع

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •