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

نام تاپیک: چند سوال در مورد thread ها

  1. #1

    چند سوال در مورد thread ها

    سلام
    1-چطوری میشه همه thread ها رو در هر وضعیتی که هستند suspedویا abort غیر فعال کرد یا به اصطلاح kill
    کرد.؟
    2-وقتی یه thread suspend میشه بعد از resume مجددا از همان سر خطی که suspend شده بود به کار ادامه
    میده؟ و مقدار متغیر ها هم حفظ میشه برای ادامه اجرا؟
    3-چطوری میشه از وضعیت یک thread اطلاع پیدا کرد؟

  2. #2
    چطوری میشه یه Thread رو در هر وضعیتی که داره kill کرد؟
    مشکل کد زیر چیه؟
    [code]
    mythread1.Start()
    ....
    ....
    ....
    mythread1.suspend()
    .....
    .....
    .....
    mythread1.Abort()
    [code/]
    خطایی که میده:
    thread in suspend state ...
    من میخوام بدونم چطور میشه این thread رو با اینکه suspend شده نابود کرد؟

  3. #3
    شاید راه حل خیلی خوبی نباشه :


    if ( th.ThreadState == ThreadState.Suspended )
    {
    th.Resume();
    }

    th.Abort();
    th = null;

  4. #4

    ا

    ممنون
    البته من به این نتیجه رسیدم thread ها در دات فریم ورک ذاتا مشکل دار هستند و خطاهای عجیب از اونا
    سر میزنه که باید با بلوک try , catch اونو کنترل کرد.

  5. #5
    کلا برنامه نویسی Thread ها کار پیچیده ‌ایه. به خصوص وقتی که Thread ها باید با هم در ارتباط باشند. چون نمی‌تونیم از قبل حدس بزنیم که وقتی Thread کاری رو انجام میده،نرم افزار در چه وضعیتیه.

    حالا شما با چه اشکالی برخورد کردید که می‌گید Thread ها در دات نت مشکل دارن ؟ اتفاقا به نظر من استفاده از Thread خیلی راحت تر شده.

  6. #6
    کاربر دائمی آواتار aidinwashere
    تاریخ عضویت
    فروردین 1384
    محل زندگی
    پشته سرت
    پست
    632
    یه مثال میشه بزنید که کاربرد این Thread رو نشون بده؟

  7. #7
    مثلا فرض کنید می‌خواهیم بررسی کنیم ببینیم چند عدد بین اعداد 0 تا Max مجموع ارقامشون برابر n هست. مثلا اگر n = 9 باشه، مجموع رقم‌های 81 , 18 , 27 , 72 , 234 و ... همه برابر 9 هست.

    ضمنا از راه حل‌های ریاضی و منطقی هم استفاده نمی‌کنیم. می‌خواهیم تک تک اعداد رو امتحان کنیم ببینیم توی این شرط صدق می‌کنن یا نه. این نمونه یک حلقه بلنده که وقت CPU رو زیاد می‌گیره و باعث می‌شه UI قفل کنه. بنابراین بهتره که اعداد رو به چند گروه تقسیم کنیم و هر گروه رو بفرستیم توی یک ترد و آخر سر نتیجه کلی رو به کاربر نشون بدیم. اینطوری UI قفل نمی‌کنه و محاسبات به طور مجزا انجام می‌شن.

    برای اینکار یک کلاس شمارنده به نام clsSum ایجاد می‌کنیم و یک Instance از اون رو توی هر ترد اجرا می‌کنیم. توی این مثال تردها با هم در ارتباط نیستند. اگر مشکلمون طوری باشه که احتیاج باشه تردها با هم Sync بشن، یه مقدار کار مشکل و وقت گیر میشه. هر دو روش هم توی مثال به کار رفته. در قسمت بالایی از همون ترد UI استفاده شده و در قسمت پایین از سه ترد جداگانه.

    ضمنا شما نگفتید که چه مشکلی داشتید که به این نتیجه رسیدید که Thread ها در دات نت ذاتا مشکل دارند. شاید یه روز به درد ما هم بخوره، اقلا بدونیم تو اون موارد سراغ MultiThreading نریم.
    فایل های ضمیمه فایل های ضمیمه
    آخرین ویرایش به وسیله یاشار : سه شنبه 29 شهریور 1384 در 22:06 عصر

  8. #8

    نقل قول: چند سوال در مورد thread ها

    سلام.من سوال از ترد داشتم.خیلی حیاتیه.لطفا کمک کنید
    میخوام بدونم چطور چند ترد باید منتظر بمونند که کار یک ترد تموم بشه؟؟؟

  9. #9
    کاربر دائمی
    تاریخ عضویت
    مرداد 1388
    محل زندگی
    پونک
    سن
    42
    پست
    490

    نقل قول: چند سوال در مورد thread ها

    نقل قول نوشته شده توسط reyhaneh72 مشاهده تاپیک
    سلام.من سوال از ترد داشتم.خیلی حیاتیه.لطفا کمک کنید
    میخوام بدونم چطور چند ترد باید منتظر بمونند که کار یک ترد تموم بشه؟؟؟
    یک راهش استفاده از کلاس ManualResetEvent هست، من استفاده کردم و خیلی خوب جواب داد. سرچ کنین تا طرز استفاده ش دستتون بیاد

    باید از متدهای Reset, Set, WaitOne استفاده کنین...

  10. #10
    کاربر دائمی
    تاریخ عضویت
    اسفند 1384
    محل زندگی
    تهران
    پست
    1,629

    نقل قول: چند سوال در مورد thread ها

    سلام
    مبحث Threadها یکی از مباحث حرفه‌ای در برنامه‌نویسی هست، بهتره قبل از مطالعه و آگاهی کامل ازشون استفاده نکنید. چون خیلی اذیتتون می‌کنه.
    ضمن این که فقط جایی از Threadها استفاده کنید که واقعاً لازمه، چون در غیر این صورت فقط کارتون رو سخت کردین.

    برای این که یک یا چند رشته منتظر پایان اجرای رشته‌ی دیگه بشن روش‌های مختلفی وجود داره که هر کدوم در شرایط خاصی استفاده می‌شه.
    یکی از روش‌ها استفاده از سیگنال هست که دوستمون elec60 بهش اشاره کرده. اما باید به دقت ازش استفاده کنید. استفاده‌ی اشتباه می‌تونه
    باعث deadlock بشه. یعنی دو تا رشته منتظر سیگنال از طرف مقابل هستن و این سیگنال هرگز ارسال نخواهد شد.
    یه روش دیگه هم بررسی وضعیت رشته‌ی مورد نظر هست. می‌تونید تو یه حلقه Terminate شدن رشته‌ی مورد نظر رو بررسی کنید.

    صبا صبوحی

  11. #11

    نقل قول: چند سوال در مورد thread ها

    ممنون بابت راهنماییتون..thread هایی که استفاده میکنم باید با فایلا کار کنند...چجور میتونم زمان ثبت اطلاعات در فایل توسط هر ترد رو نشون بدم ب کاربر؟؟

  12. #12
    کاربر دائمی
    تاریخ عضویت
    اسفند 1384
    محل زندگی
    تهران
    پست
    1,629

    نقل قول: چند سوال در مورد thread ها

    سلام
    Threadها نسبت به تداخل خیلی حساس هستن. برای همچنین کارهایی باید از Invoke استفاده کنید.
    توی فرمی که قرار هست رویدادها نمایش داده بشن یک متد برای این کار تعریف کنید و در Threadها اون متد رو
    با استفاده از Invoke فراخوانی کنید.

    صبا صبوحی

  13. #13

    نقل قول: چند سوال در مورد thread ها

    نقل قول نوشته شده توسط SabaSabouhi مشاهده تاپیک
    سلام
    Threadها نسبت به تداخل خیلی حساس هستن. برای همچنین کارهایی باید از Invoke استفاده کنید.
    توی فرمی که قرار هست رویدادها نمایش داده بشن یک متد برای این کار تعریف کنید و در Threadها اون متد رو
    با استفاده از Invoke فراخوانی کنید.

    صبا صبوحی
    میشه بیشتر توضیح بدید چون من C#‎درحد مبتدی بلدم

تاپیک های مشابه

  1. اجرای تابع با پارامتر به صورت یک Thread.
    نوشته شده توسط hdv212 در بخش C#‎‎
    پاسخ: 16
    آخرین پست: یک شنبه 17 خرداد 1394, 00:11 صبح
  2. پیاده سازی تایمر با استفاده از Thread
    نوشته شده توسط Ghasem Dehghani در بخش C#‎‎
    پاسخ: 18
    آخرین پست: شنبه 15 اردیبهشت 1386, 17:40 عصر
  3. ایجاد thread
    نوشته شده توسط mahtab_18 در بخش C#‎‎
    پاسخ: 1
    آخرین پست: سه شنبه 11 اردیبهشت 1386, 09:59 صبح

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

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