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

نام تاپیک: Threads, Events & Mutexes در سی شارپ ، قسمت چهارم

  1. #1
    کاربر دائمی
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    ایران - تهران
    پست
    2,342

    Threads, Events & Mutexes در سی شارپ ، قسمت چهارم

    مثال هجدهم :

    using System.Threading;

    public class yyy
    {
    public void abc()
    {
    for ( int i = 0; i<=10;i++)
    {
    System.Console.Write(i + " ");
    Thread.Sleep(1);
    }
    }

    public void pqr()
    {
    for ( int i = 0; i<=10;i++)
    {
    System.Console.Write(i+ "...");
    Thread.Sleep(1);
    }
    }
    }

    public class zzz
    {
    public static void Main()
    {
    yyy a = new yyy();
    Thread t = new Thread(new ThreadStart(a.abc));
    Thread t1 = new Thread(new ThreadStart(a.pqr));
    System.Console.WriteLine(t.Priority);
    t.Priority = ThreadPriority.Highest;
    t1.Priority = ThreadPriority.Lowest;
    t.Start();
    t1.Start();
    }
    }

    Output
    Normal
    0 1 2 3 4 0...5 1...6 2...7 3...8 4...9 5...10 6...7...8...9...10...



    در مورد طول time-slice اختصاص داده شده به یک thread و یا سایر تردها نیز می توان تصمیم گیری کرد. این مورد با تنظیم خاصیت Priority (حق تقدم) قابل حصول است. به صورت پیش فرض سطح حق تقدم مساوی 2 است. بنابراین خروجی برنامه ی بالا در ابتدا Normal می باشد. تمام تردها با این سطح حق تقدم آغاز می شوند. ThreadPriority enum دارای 5 مقدار می باشد:

    •	0 - Zero
    • 1 - BelowNormal
    • 2 - Normal
    • 3 - AboveNormal
    • 4 - Highest


    در برنامه ی فوق حق تقدم ترد t به بالاترین حد ممکن و حق تقدم ترد t1 به کمترین حد ممکن تنظیم شده است. بنابراین ترد t زمان بیشتری برای تکمیل کارش نسبت به ترد t1 خواهد داشت و حلقه ی for خودش را قبل از خاتمه ی ترد t1 به پایان می رساند.



    مثال نوزدهم :

    using System.Threading;

    public class yyy
    {
    public void abc()
    {
    try
    {
    System.Console.WriteLine("in abc");
    for ( ; ; ) ;
    }
    catch ( System.Exception e)
    {
    System.Console.WriteLine("in abc Exception " +e.ToString() );
    }
    finally
    {
    System.Console.WriteLine("in abc Finally");
    }
    }
    }

    public class zzz
    {
    public static void Main()
    {
    yyy a = new yyy();
    Thread t = new Thread(new ThreadStart(a.abc));
    t.Start();
    Thread.Sleep(10);
    t.Abort();

    System.Console.ReadLine();
    }
    }


    Output
    in abc
    in abc Exception System.Threading.ThreadAbortException: Thread was being aborted.
    at yyy.abc()
    in abc Finally



    Abort نمودن یک ترد هنگامیکه مشغول اجرای کدی می باشد سبب ایجاد یک Exception خواهد شد و کد به قسمت catch و finally منتقل می گردد. یک ترد پس از انتقال به این قسمت ها خاتمه می یابد.



    مثال بیستم :


    using System.Threading;

    public class yyy
    {
    public void abc()
    {
    try
    {
    System.Console.WriteLine("in abc");
    for ( ; ; ) ;
    }
    catch ( System.Exception e)
    {
    System.Console.WriteLine("in abc Exception " +e.ToString() );
    }
    finally
    {
    System.Console.WriteLine("in abc Finally");
    }
    }
    }

    public class zzz
    {
    public static void Main()
    {
    yyy a = new yyy();
    Thread t = new Thread(new ThreadStart(a.abc));
    t.Abort();
    t.Start();
    }
    }

    Output
    (no output)


    Abort نمودن یک ترد قبل از شروع به اجرای کد ، هیچگونه Exception ایی را سبب نخواهد شد. زیرا ترد در مرحله ی مرگ (!) به سر می برد. بنابراین هرگز کدی در abc فراخوانی نمی گردد.



    مثال بیست و یکم :

    using System.Threading;
    public class yyy
    {
    public void abc()
    {
    for (int i = 1 ; i<= 10 ; i++ )
    {
    System.Console.Write(i + " " );
    Thread.Sleep(1);
    }
    }
    }

    public class zzz
    {
    public static void Main()
    {
    yyy a = new yyy();
    Thread t = new Thread(new ThreadStart(a.abc));
    t.Start();
    Thread.Sleep(10);
    t.Suspend();
    System.Console.WriteLine("\n After Suspend");
    Thread.Sleep(10);
    System.Console.WriteLine("Before Resume");
    t.Resume();
    }
    }


    Output
    1
    After Suspend
    Before Resume
    2 3 4 5 6 7 8 9 10



    ما مجاز به تعلیق (Suspend) اجرای یک ترد در هر زمانی هستیم. در مثال فوق ترد برای مدت زمانی اجرا و سپس به حالت تعلیق در آورده شده است. سپس فرمان از سرگیری مجدد (Resume) صادر گردیده است . لازم به ذکر است که تعلیق مجدد تردی که در حال تعلیق به سر می برد ، خطایی را ایجاد نخواهد کرد زیرا تعیلق مجدد بر آن اثری ندارد. یک Resume برای undo کردن میلیون ها suspend کافی است.



    مثال بیست و دوم:

    using System.Threading;

    public class yyy
    {
    public void abc()
    {
    for ( int i = 0; i<=3;i++)
    {
    Thread t2 = Thread.CurrentThread;
    System.Console.Write(i + " " + t2.GetHashCode() + " ");
    Thread.Sleep(1);
    }
    }
    }

    public class zzz
    {
    public static void Main()
    {
    yyy a = new yyy();
    Thread t = new Thread(new ThreadStart(a.abc));
    Thread t1 = new Thread(new ThreadStart(a.abc));
    t.Start();
    t1.Start();
    }
    }

    Output
    0 2 0 3 1 2 1 3 2 2 2 3 3 2 3 3


    به هر ترد به صورت ذاتی و درونی یک عدد نسبت داده می شود. به این عدد HashCode گفته می شود. Hashing پروسه ی نسبت دهی یک عدد به یک هویت است ، بطوریکه بتوان آنرا به سادگی در یک لیست طولانی مشخص کرد. این عدد برای ردگیری تعداد زیادی از تردها مفید است.

  2. #2
    کاربر دائمی
    تاریخ عضویت
    آبان 1382
    محل زندگی
    ایران - تهران - تهران پارس
    پست
    237
    ممنون :wink:

  3. #3
    سلام

    با اجازه شما من این مقالات شما رو می نویسم چون خیلی جالبند.

    ایرادی که نداره؟

    ممنون

  4. #4
    کاربر دائمی
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    ایران - تهران
    پست
    2,342
    منظور شما از نوشتن چیست؟

  5. #5
    کاربر دائمی
    تاریخ عضویت
    آبان 1382
    محل زندگی
    ایران - تهران - تهران پارس
    پست
    237
    :shock: :shock: :shock:

  6. #6
    کاربر دائمی آواتار kablayi
    تاریخ عضویت
    بهمن 1383
    محل زندگی
    شیراز
    پست
    773
    :موفق:

  7. #7
    دستت درد نکنه

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

  1. Threads, Events & Mutexes در سی شارپ ، قسمت اول
    نوشته شده توسط Vahid_Nasiri در بخش مقالات مرتبط با Microsoft .Net Framework
    پاسخ: 7
    آخرین پست: یک شنبه 25 دی 1390, 00:22 صبح
  2. Threads, Events & Mutexes در سی شارپ ، قسمت ششم
    نوشته شده توسط Vahid_Nasiri در بخش مقالات مرتبط با Microsoft .Net Framework
    پاسخ: 10
    آخرین پست: یک شنبه 08 دی 1387, 15:04 عصر
  3. Threads, Events & Mutexes در سی شارپ ، قسمت سوم
    نوشته شده توسط Vahid_Nasiri در بخش مقالات مرتبط با Microsoft .Net Framework
    پاسخ: 2
    آخرین پست: جمعه 08 اردیبهشت 1385, 02:06 صبح
  4. Threads, Events & Mutexes در سی شارپ ، قسمت دوم
    نوشته شده توسط Vahid_Nasiri در بخش مقالات مرتبط با Microsoft .Net Framework
    پاسخ: 4
    آخرین پست: جمعه 08 اردیبهشت 1385, 01:58 صبح
  5. Threads, Events & Mutexes در سی شارپ ، قسمت پنجم
    نوشته شده توسط Vahid_Nasiri در بخش مقالات مرتبط با Microsoft .Net Framework
    پاسخ: 6
    آخرین پست: جمعه 23 بهمن 1383, 06:33 صبح

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

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