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

نام تاپیک: Multi Threading

  1. #1
    کاربر تازه وارد
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    تهران
    پست
    70

    Question Multi Threading

    من یک روال به نام main دارم که یک سری پردازش توش انجام میشه. حالا می خوام در لحظه شروع برنامه دو عدد Thread ایجاد کنم که هر دو از همین روال (main) استفاده کنند. آیا قطعه کد زیر درست هست؟

    private void Form1_Load(object sender, EventArgs e)
    {
    t = new Thread(new ThreadStart(main));
    t.Start();

    t = new Thread(new ThreadStart(main));
    t.Start();
    }

  2. #2
    کاربر تازه وارد
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    تهران
    پست
    70

    نقل قول: Multi Threading

    پس چرا کسی کمک نمیکنه؟

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

    نقل قول: Multi Threading

    شما با یک ابجکت نخ دو تا نخ را ایجاد کردید شاید مشکل به وجود نیاید ولی دسترسی به نخ اول از بین می رود و نمی توانید نخ اول را کنترل کنید. مثلا لغو کنید.
    چرا از دو نخ استفاده نمی کنید.

    private void Form1_Load(object sender, EventArgs e)
    {
    t = new Thread(new ThreadStart(main));
    t.Start();

    t2 = new Thread(new ThreadStart(main));
    t.Start();
    }

    در این صورت اگر تداخلی در استفاده از متغییر ها و ... به وجود نیاید مشکلی ندارد.

  4. #4
    کاربر تازه وارد
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    تهران
    پست
    70

    نقل قول: Multi Threading

    به کد زیر دقت کنید:

    private void Form1_Load(object sender, EventArgs e)
    {
    t = new Thread(new ThreadStart(main));
    t.Start();

    Thread.Sleep(1000);

    t = new Thread(new ThreadStart(main));
    t.Start();
    }

    public void main()
    {
    int x, y, a, b;
    double selectY;
    Random rnd = new Random();

    x = rnd.Next(0, lblEnvironment.Width - 20);

    Thread.Sleep(100);
    y = rnd.Next(0, lblEnvironment.Height - 20);

    if ((x > -20) && (x < lblEnvironment.Width))
    {
    Thread.Sleep(100);
    selectY = rnd.NextDouble();

    if (selectY < 0.5)
    y = -20;
    else
    y = lblEnvironment.Height;
    }

    a = rnd.Next(-5, 5);
    Thread.Sleep(100);
    b = rnd.Next(-5, 5);

    while (a == 0) a = rnd.Next(-5, 5);
    while (b == 0) b = rnd.Next(-5, 5);

    Pen pen = new Pen(Color.Red, 10);
    Graphics g = lblEnvironment.CreateGraphics();

    while (true)
    {
    if (cancelThread)
    {
    cancelThread = false;
    t.Abort();
    }

    g.DrawEllipse(pen, x, y, 20, 20);

    Thread.Sleep(100);
    g.Clear(Color.White);

    if (((x < 0) && (a < 0)) || ((x == lblEnvironment.Width) && (a > 0)))
    a *= -1;
    x += a;

    if (((y < 0) && (b < 0)) || ((y == lblEnvironment.Height) && (b > 0)))
    b *= -1;
    y += b;

    if ((x > lblEnvironment.Width - 25) || (x < 5))
    {
    t = new Thread(new ThreadStart(main));
    t.Start();

    Thread.CurrentThread.Abort();
    }

    if ((y > lblEnvironment.Height - 25 && b > 0) || (y < 5 && b < 0))
    {
    b *= -1;
    }
    }
    }


    قضیه از این قراره که من میخوام دو عدد گوی در ابتدای برنامه در قالب Thread بوجود بیان و هر کدوم جداگانه واسه خودشون شروع به حرکت به جهت های مختلف کنن و هر وقت که هر یک از گوی ها به دیواره سمت چپ یا راست برخورد میکنه باید از بین بره و یک گوی دیگه در قالب یک Thread جدید ایحاد بشه و این روال تا آخر ادامه داشته باشه. همه چیز الآن درست هست و تنها یک مشکل مونده و اون هم اینه که انگاری هر دو گوی از یک منبع استفاده می کنن و انگاری که منابع بین دو گوی تقسیم میشه و گوی ها بصورت چشمک زن در میان. برای حل این مشکل باید چیکار کنم؟

    خواهشن کمک کنید.
    مرسی.

برچسب های این تاپیک

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

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