none
C# thread[] Oluşturma RRS feed

  • Genel Tartışma

  • Arkadaşlar Çoklu Thread Kullanıcam bunun için şöyle bir kod yzdım.

    Ama şurayı nasıl doldurmam gerektiğini çözemedim. Nasıl yapmalıyım?

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Threading;
    namespace ThreadSayac
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            Thread olustur;
    
            private void button1_Click(object sender, EventArgs e)
            {
                Thread olustur = new Thread(new ThreadStart(OlustuR));
                olustur.Start();
            }
    
            void OlustuR() 
            {
                string[] THlist = new string[100];
                Thread[] thread = new Thread[100];
    
                for (int i = 0; i < 100; i++)
                {
                    thread[i] = new Thread(new ThreadStart(THlist[i]));
                }
    
                for (int i = 0; i < 100; i++)
                {
                    thread[i].Start();
                }
            }
        }
    }

    Aşşağıdaki kısım:

    Metod oluşturmam gerek ama nasıl?

    8 Mayıs 2017 Pazartesi 20:13

Tüm Yanıtlar

  • THList[i] yerine, herhangi bir değişken olarak, i.ToString() atarsan, 0 dan 99'a kadar thread oluşturmuş olursun.
    8 Mayıs 2017 Pazartesi 20:40
  • Yani şöyle

            void OlustuR() 
            {
                Thread[] thread = new Thread[100];
                
                for (int i = 0; i < 100; i++)
                {
                    thread[i] = new Thread(new ThreadStart("ThreaD_" + i.ToString()));
                }
    
                for (int i = 0; i < 100; i++)
                {
                    thread[i].Start();
                }
            }

    Ama nasıl kodla method oluşturcam?



    8 Mayıs 2017 Pazartesi 20:45
  • Merhaba,

    Oluşturduğunuz for döngüsünü farklı bir method içerisine alıp, ThreadStart sınıfının parametresine, oluşturduğunuz methodu verir misiniz?

    8 Mayıs 2017 Pazartesi 21:48
    Moderatör
  • Sanırım kasteddiğiniz buydu:

    Thread olustur;
            int j=0;
            private void button1_Click(object sender, EventArgs e)
            {
                Thread olustur = new Thread(new ThreadStart(OlustuR));
                olustur.Start();
            }
    
            void OlustuR() 
            {
    
                farkliMetod();
               
            }
    
            Thread[] thread = new Thread[100];
    
            void farkliMetod()
            {
                for (int i = 0; i < 100; i++)
                {
                    thread[i] = new Thread(new ThreadStart(farkliMetod));
                }
            }
    
            private void button4_Click(object sender, EventArgs e)
            {
                for (int i = 0; i < 100; i++)
                {
                    thread[i].Start();
                }
            }

    Eğer kasteddiğiniz buysa tüm threadlar aynı methodu gösteriyor. Doğru mu? ben her thread'ın kendine özel bir methodu olsun istiyorum. (Eğer dediğinizi yanlış anlamadıysam)



    8 Mayıs 2017 Pazartesi 22:01
  • Deleted
    8 Mayıs 2017 Pazartesi 22:46
  • Deleted
    8 Mayıs 2017 Pazartesi 22:53
  • Evet thread'ın nasıl çalıştığını biliyorum ama 100 tane thread için ayrı ayrı metod yazamam. Benim öğrenmek istediğim. 100 tane metodu her hangi bir döngü ile kodla oluşturabilir miyim? tek tek yazarak değil. Bunu yapmanın bir yolu var mı?
    8 Mayıs 2017 Pazartesi 22:55
  • Deleted
    8 Mayıs 2017 Pazartesi 23:14
  • Bunu neden istediğini sorabilir miyim? =)

    Thread, fonksiyon üretmek ya da fonksiyon kalabalığı yapmak için kullanılan bir şey değil ki. Thread var olan bir işlemi ana kanaldan bağımsız başka bir kanaldan yürütmek için kullanılır. Amacınız bunun dışında bir şey ise thread önermiyoruz.

    Her ne kadar yanlış bir şey olsada araba sürerken telefonla konuşmak bir gerçek hayat thread örneklemesidir.

    Aynı anda araba sürerken eş zamanlı olarak telefon görüşmesi de yapabilmek. Sonuçta araba sürerken telefon çaldığında bir anda bütün beyin fonksiyonlarını yitirip arabayı durdurduktan sonra telefonu açmıyorsun. İkisini aynı anda yapabiliyorsun.


    try { OldugunGibiGorun(); } catch (BeceremedimException) { GorundugunGibiOl(); }



    Bunun nedeni ilgili  Tek bir sorunun bütün çözüm olabilecek ihtimallerini işlemcinin farklı kanallarında çalıştırmak istiyorum. Böylece işlemim daha kısa sürecek.

    ve eğer yardım edebilirsen DynamicMethod sınıfıyla ilgili pek kaynak bulamadım (Çok farklı şeyler vardı pek anlamadım). Bir tane dinamik metod oluşturdum ama metodun içerisinde olmasını istediğim kodları nereye yazacağımı bilmiyorum.

    Ayrıca ThreadStart sınıfının parametresine Dinamik Metod yazılmıyor galiba..

    Kodların son durumu aşağıdaki gibi:

    public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            Thread olustur;
            Thread[] thread = new Thread[100];
            DynamicMethod[] squareIt = new DynamicMethod[100];
    
            private void button1_Click(object sender, EventArgs e)
            {
                Thread olustur = new Thread(new ThreadStart(OlustuR));
                olustur.Start();
            }
    
            void OlustuR()
            {
                for (int i = 0; i < 100; i++)
                {
                    Type[] methodArgs = { typeof(void) };
                    squareIt[i] = new DynamicMethod("TH_" + i.ToString(), typeof(void), methodArgs, typeof(void).Module);                
                    thread[i] = new Thread(new ThreadStart(squareIt[i]));
                }
            }
    
            /*
            public void squareIt[index]()
            {
                MessageBox.Show(index.ToString() + ".Thread Olarak Calisiyorum.");
            }
            */
    
            private void button4_Click(object sender, EventArgs e)
            {
                for (int i = 0; i < 100; i++)
                {
                    thread[i].Start();
                }
            }        
        }

    Daha yararlı olabileceği için bir tanede resim:




    9 Mayıs 2017 Salı 01:54