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