18 Ocak 2014 Cumartesi

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

Hiç yorum yok :

Yorum Gönder