18 Ocak 2014 Cumartesi

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

Hiç yorum yok :

Yorum Gönderme