نمایش نتایج 1 تا 9 از 9

نام تاپیک: جلوگیری از اجرای مجدد یک thread در حال اجرا .

  1. #1

    Question جلوگیری از اجرای مجدد یک thread در حال اجرا .

    سلام .
    من یه thread دارم که دارای یک پارامتر به نام runi هست که وقتی به این runi پارامتر های مختلفی نسبت میدم وظایف مختلفی رو انجام میدن .

    حالا فرض کنید با یک دکمه فرمان یک thread با پارامتر runi=A وبا دکمه فرمان دوم یک thread با پارامتر runi=B ایجاد کردم مشکل اینجاست که اگر به هر دلیلی در حالی که ترید runi=A در حال اجراست مجدد دکمه فشرده بشه و دستور اجرای ترید با پاراتر runi=A اعمال بشه برنامه من با ساختاری که داره دچار اشکال میشه . من میخوام تا پایان کار ترید runi A مجدد این ترید با این پارامتر ایجاد نشه .
    چکار میتونم بکنم ؟

  2. #2

    نقل قول: جلوگیری از اجرای مجدد یک thread در حال اجرا .

    ميتوني با استفاده از متد waitfor ترد اصلي برنامه رو تا مادامي كه كار تردت تموم نشده منتظر نگه داري كه در اين صورت رابط كاربريت فريز ميشه ، ميتوني يك متغيير Boolean تعريف كني و موقع شروع اجراي ترد مقدارش رو مثلا true كني و در پايان كار تردت false ش كني ، تو باقي دكمه هات چك كن اگر متغييرت false اجازه ساخت و اجراي ترد رو بده و در غير اين صورت اجازه ساخت رو نده ، البته راه هاي ديگه اي هم هست ولي پيچيده هستن و مرتبط با مباحث تخصصي Multithreading كه تو پياده سازيشون به مشكل ميخوريد ...

    راحت ترين روش همون پياده سازي متغيير ها هست .

  3. #3

    نقل قول: جلوگیری از اجرای مجدد یک thread در حال اجرا .

    متشکرم .
    در مورد اون اصطلاح " مباحث تخصص Multithreading " که فرمودید خواستم عرض کنم که من خیلی علاقه مندم این مبحث رو عمیق یاد بگیرم ولی متاسفانه منبع کاملی برای یادگیری پیدا نکردم . اگر احیانا شما منبعی سراغ دارید چه فارسی و چه انگلیسی معرفی کنید خیلی ممنون میشم .

  4. #4
    کاربر دائمی آواتار joker
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    اصفهان
    سن
    42
    پست
    1,326

    نقل قول: جلوگیری از اجرای مجدد یک thread در حال اجرا .

    همين كه گفتن بهترين و سريعترن راه حلته ، استفاده از يك متغيير عمومي براي چك كردن فعاليت يك ترد.

  5. #5

    نقل قول: جلوگیری از اجرای مجدد یک thread در حال اجرا .

    ممنون از دوستان.
    اما با روشی که آقای تاجیک فرمودند. اگه متغیر مقدارش True بود اصلا ترد ساخته نمیشه.
    به نظرتون چطوری باید کاری کرد که ترد ساخته بشه و منتظر بمونه و قتی اون متغیره مقدارش False شد. ترد کارش رو شروع کنه. البته ترد ها تو صف باشند. نه اینکه متغیر وقتی False شد یه هویی همه ترد های منتظر شروع به کار کنند.


  6. #6
    کاربر دائمی آواتار joker
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    اصفهان
    سن
    42
    پست
    1,326

    نقل قول: جلوگیری از اجرای مجدد یک thread در حال اجرا .

    خب متغيير را خط اول داخل ترد چك كن و بزار توي يك لوپ كه در حالت استاندارد همون WaitForMultipleObjects يا WaitForSingleObjects هستند استفاده كن
    البته مثلا با يك event هم تعريف كني كه بتونه از اين حلقه خارج بشه :)
    زياد كار نكردم كه سمپل برات بزارم ولي بگردي توي اينترنت زياد هست.

  7. #7

    نقل قول: جلوگیری از اجرای مجدد یک thread در حال اجرا .

    میتونید یک Queue بسازید و نام تردهایی که درخواست اجرا دارند رو درش درج کنید ، پس از پایان کار هر ترد از اول این صف یکی از تردها رو بردارید و متد Execute اون رو اجرا کنید .

  8. #8

    نقل قول: جلوگیری از اجرای مجدد یک thread در حال اجرا .

    یک Queue بسازید
    چی هست. میشه یه نمونه بزاری.


  9. #9

    نقل قول: جلوگیری از اجرای مجدد یک thread در حال اجرا .

    چیز خاصی نیست ، همون صف هست ، میتونید با کلاس های مختلفی مثل TList و ... بسازیدش .

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •