18 Ocak 2014 Cumartesi

C Sharp Form Uygulamalar Kaynak Kodlar Bölüm 26

C Sharp Form Uygulamalar N Tane Sayının Toplamını Çoklu Process İle Hesaplama (Parametreli Thread)



KONU : C Sharp Uygulamalar - C Sharp ( C# ) N tane sayının toplamını çoklu process kullanarak hesaplayan bir porgram yazın. Sayıların tutulduğu bütün sayılara ulaşabilen k tane process oluşturun . Her bir process diziden iki sayı alsın ve bunları toplayarak genel toplamın tutulduğu değişkenin değerini güncellesin. Dizini bütün elemanları genel toplama eklendiğinde, program sonlansın. (Not : parametreli thread kullanılarak yapıldı.)
ETİKETLER:c sharp process - c sharp thread - c sharp çoklu parçacık - c# thread oluşturma





UYGULAMAYI İNDİR


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 C_Sharp_Form_Coklu_Is_Parcacık_Olusturma
{
    public partial class FormThread : Form
    {
        public delegate void DelegateStandardPattern(int threadNo, int birinciSayi, int ikinciSayi);
        public delegate void DelegateStandardPatternSonuc();
        List sayilar = new List();
        ParameterizedThreadStart pthreadstart = null;
        Thread thread = null;
        int toplam;


        public FormThread()
        {
            InitializeComponent();
            this.Text = "Çoklu  İş Parçacığı Kullanarak Toplama İşlemi Yapma";
            //multi tread yaparken karşılan problem
            //Cross call hatası almamak için invoke ile fonksiyorun tekrar çağıracağım
        }

        private void Topla(int threadNo, int birinciSayi, int ikinciSayi)
        {
            if (this.InvokeRequired)
            {
                  this.Invoke(new DelegateStandardPattern(Topla), threadNo, birinciSayi, ikinciSayi);
            }
            else
            {
                try
                {
                    toplam = toplam + Convert.ToInt32(birinciSayi) + Convert.ToInt32(ikinciSayi);
                    lstToplamSonucu.Items.Add(string.Format("> {0}. thread çalışıyor ve {1} ve {2} sayılarını topluyor : toplam = toplam + {1} + {2}", Convert.ToInt32(threadNo), Convert.ToInt32(birinciSayi), Convert.ToInt32(ikinciSayi)));
                }
                catch (Exception)
                {

                }
            }

 
                SonucuGuncelle();
          
        }

        private void SonucuGuncelle()
        {
            if (lblToplama.InvokeRequired)
            {
                this.Invoke(new DelegateStandardPatternSonuc(SonucuGuncelle));
            }
            else
            {
                lblToplama.Text = toplam.ToString();
            }
        }

        private void btnListeyiTemizle_Click(object sender, EventArgs e)
        {
            lstSayilar.Items.Clear();
            lstToplamSonucu.Items.Clear();
            sayilar.Clear();
        }

        private void btnSayiyiGir_Click(object sender, EventArgs e)
        {
            try
            {
                int sayi = Convert.ToInt32(txtSayiGir.Text);
                lstSayilar.Items.Add(sayi);
                sayilar.Add(sayi);
                txtSayiGir.Text = "";
                txtSayiGir.Focus();
            }
            catch (Exception)
            {

            }
        }

        private void btnToplamaYap_Click(object sender, EventArgs e)
        {
            if (lstSayilar.Items.Count < 1) return;

            ThreadStart ts;

            try
            {
                for (int i = 0; i < lstSayilar.Items.Count; i = i + 2)
                {
                    if (lstSayilar.Items.Count - 1 == i)
                    {
                        ts = delegate() { Topla(i / 2 + 1, sayilar[i], 0); };
                    }
                    else
                    {
                        ts = delegate() { Topla(i / 2 + 1, sayilar[i], sayilar[i + 1]); };
                    }


                    thread = new Thread(ts);
                    thread.Start();
                    Thread.Sleep(200);
                    ts = null;
                }
            }
            catch (Exception)
            {

            }
        }

        private void FormThread_Load(object sender, EventArgs e)
        {
            lblToplama.Text = toplam.ToString();
            this.AcceptButton = btnSayiyiGir;
        }
    }
}


UYGULAMAYI İNDİR

C Sharp Form Uygulamalar N Tane Sayının Toplamını Çoklu Process İle Hesaplama



KONU : C Sharp Uygulamalar - C Sharp ( C# ) N tane sayının toplamını çoklu process kullanarak hesaplayan bir porgram yazın. Sayıların tutulduğu bütün sayılara ulaşabilen k tane process oluşturun . Her bir process diziden iki sayı alsın ve bunları toplayarak genel toplamın tutulduğu değişkenin değerini güncellesin. Dizini bütün elemanları genel toplama eklendiğinde, program sonlansın.
ETİKETLER: c sharp process - c sharp thread - c sharp çoklu parçacık - c# thread oluşturma





UYGULAMAYI İNDİR



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 C_Sharp_Form_Coklu_Is_Parcacık_Olusturma
{
    public partial class FormThread : Form
    {
        public delegate void DelegateStandardPattern(object threadNo);
        List sayilar = new List();
        ParameterizedThreadStart pthreadstart = null;
        Thread thread = null;
        ThreadStart ts;
        int toplam;
        int indeks = 0;
        bool sonucYazildiMi = false;

        public FormThread()
        {
            InitializeComponent();
            this.Text = "Çoklu  İş Parçacığı Kullanarak Toplama İşlemi Yapma";
            //multi tread yaparken karşılan problem
            //Cross call hatası almamak için invoke ile fonksiyorun tekrar çağıracağım
        }
        
        private void Topla(object threadNo )
        {
            if (lstToplamSonucu.InvokeRequired)
            {
                lstToplamSonucu.Invoke(new DelegateStandardPattern(Topla), threadNo);
            }
            else
            {
                try
                {               //toplanacak sayı varsa toplam işlemine devam et
                    if (indeks < sayilar.Count && sayilar.Count - 1 != indeks)
                    {
                        toplam = toplam +  sayilar[indeks] + sayilar[indeks + 1];
                        lstToplamSonucu.Items.Add(string.Format("> {0}. thread çalışıyor ve {1} ve {2} sayılarını topluyor : toplam = toplam + {1} + {2}", Convert.ToInt32(threadNo), sayilar[indeks], sayilar[indeks + 1]));
                        indeks += 2;


                    }
                    else if (indeks < sayilar.Count && sayilar.Count % 2 == 1)
                    {
                        toplam = toplam + sayilar[indeks];
                        lstToplamSonucu.Items.Add(string.Format("> {0}. thread çalışıyor ve {1} sayılarını topluyor : toplam = toplam + {1} ", Convert.ToInt32(threadNo), sayilar[indeks]));
                        indeks += 1;

                    }
 
                    if (indeks == sayilar.Count&& !sonucYazildiMi)
                    {
                             lstToplamSonucu.Items.Add("Toplam  = " + toplam.ToString());
                             sonucYazildiMi = true;
                    }


                }
                catch (Exception)
                {

                }
            }
        }




        private void btnListeyiTemizle_Click(object sender, EventArgs e)
        {
            lstSayilar.Items.Clear();
            lstToplamSonucu.Items.Clear();
            sayilar.Clear();
            toplam = 0;
            indeks = 0;
            sonucYazildiMi = false;
        }

        private void btnSayiyiGir_Click(object sender, EventArgs e)
        {
            try
            {
                int sayi = Convert.ToInt32(txtSayiGir.Text);
                lstSayilar.Items.Add(sayi);
                sayilar.Add(sayi);
                txtSayiGir.Text = "";
                txtSayiGir.Focus();
            }
            catch (Exception)
            {

            }
        }

        private void btnToplamaYap_Click(object sender, EventArgs e)
        {
            if (lstSayilar.Items.Count < 1) return;

            indeks = 0;
            toplam = 0;
            sonucYazildiMi = false;

            try
            {
                for (int i = 0; i < lstSayilar.Items.Count/2+1;i++ )
                {
                 
                    pthreadstart = new ParameterizedThreadStart(Topla);
                    thread = new Thread(pthreadstart);
                    thread.Start(i+1);
                }
            }
            catch (Exception)
            {

            }
        }

        Random rastgele = new Random();

        private void btnSayiOlustur_Click(object sender, EventArgs e)
        {
            int sayi =0;
            for (int i = 0; i < 1000; i++)
            {
                sayi = rastgele.Next(0, 10000);
                sayilar.Add(sayi);
                lstSayilar.Items.Add(sayi);
            }
        }

        private void FormThread_Load(object sender, EventArgs e)
        {

        }

 
    }
}

UYGULAMAYI İNDİR