KONU : C Sharp Uygulamalar - C Sharp ( C# ). Üç farklı pastacının elinde pasta yapmak için gerekli malzemelerden (un, yağ ve şeker) sadece bir tanesi mevcut olsun. Tedarikçinin elinde ise bu malzemelerden sonsuz olmasına rağmen her dağıtımda sadece 2 farklı malzeme sağlamakta (yağ+un, yağ+şeker veya un+yağ). Tedarikci ve pastacılar için birer process veya thread oluşturun (toplam 4 tane). Tedarikçi her dağıtımda elinde diğer malzemeyi tutan pastacıyı uyandıracak. Örneğin un ve yağ dağıtımı yapıyorsa, elinde şeker olan pastacıyı uyandıracak. Her pastacıda pasta yapabilmek tedarikçiyi uyandıracak ve gerekli malzemeleri dağıtılmasını bekleyecek. Bütün pastacılar belli sayıda pasta yaptığında (her pastacı için farklı olabilir), program sonlanacak. Tedarikçi her dağıtımda bir pasta yapımına yetecek kadar malzeme sağlamakta. Programı açıklayacak ekran çıktıları oluşturun (Soru 1’de verilen örnek çalışma gibi) ve farklı pasta sayıları için programı çalıştırarak sonuçları yorumlayın.
İp ucu: Bu soru için üretici/tüketici problemini göz önüne alabilirsiniz.
ETİKETLER: c sharp groupbox - c sharp timer - c sharp thread - c sharp threadstart - c sharp form - c sharp multi thread
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_Tedarikci_Pastacilar_Thread
{
public partial class Form1 : Form
{
public delegate void IslemDelegateHandler();
public IslemDelegateHandler islemDelegatePasta1;
Thread threadPasta1 = null;
public IslemDelegateHandler islemDelegatePasta2;
Thread threadPasta2 = null;
public IslemDelegateHandler islemDelegatePasta3;
Thread threadPasta3 = null;
public IslemDelegateHandler islemDelegateTedarikci;
Thread threadTedarikci = null;
int counterPasta=0;
int counterTedarik = 0;
int pasta1Sure = 0;
int pasta2Sure = 0;
int pasta3Sure = 0;
int tedarikciSure = 0;
int pasta1adet = 0;
int pasta2adet = 0;
int pasta3adet = 0;
int pasta1UretilenAdet = 0;
int pasta2UretilenAdet = 0;
int pasta3UretilenAdet = 0;
bool pasta1Uretilebilir = false;
bool pasta2Uretilebilir = false;
bool pasta3Uretilebilir = false;
bool tedarikYapilsin = false;
bool unYagIste = false;
bool unSekerIste = false;
bool sekerYagIste = false;
bool unYagIsteAktif = false;
bool unSekerIsteAktif = false;
bool sekerYagIsteAktif = false;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
islemDelegatePasta1 = new IslemDelegateHandler(Pasta1Islemleri);
islemDelegatePasta2 = new IslemDelegateHandler(Pasta2Islemleri);
islemDelegatePasta3 = new IslemDelegateHandler(Pasta3Islemleri);
islemDelegateTedarikci = new IslemDelegateHandler(TedarikciIslemleri);
ParameterizedThreadStart threadDelegatePasta1 = new ParameterizedThreadStart(this.ThreadFuncPasta1);
threadPasta1 = new System.Threading.Thread(threadDelegatePasta1);
threadPasta1.IsBackground = true;
threadPasta1.Start(null);
ParameterizedThreadStart threadDelegatePasta2= new ParameterizedThreadStart(this.ThreadFuncPasta2);
threadPasta2 = new System.Threading.Thread(threadDelegatePasta2);
threadPasta2.IsBackground = true;
threadPasta2.Start(null);
ParameterizedThreadStart threadDelegatePasta3 = new ParameterizedThreadStart(this.ThreadFuncPasta3);
threadPasta3 = new System.Threading.Thread(threadDelegatePasta3);
threadPasta3.IsBackground = true;
threadPasta3.Start(null);
ParameterizedThreadStart threadDelegateTedarikci = new ParameterizedThreadStart(this.ThreadFuncTedarikci);
threadTedarikci = new System.Threading.Thread(threadDelegateTedarikci);
threadTedarikci.IsBackground = true;
threadTedarikci.Start(null);
}
private AutoResetEvent waitHandle = new AutoResetEvent(true);
public void ThreadFuncPasta1(object parameter)
{
// While this mode is selected
while (true)
{
if (progressBarPasta1Seker.Value != 0 && progressBarPasta1Un.Value != 0 && progressBarPasta1Yag.Value != 0)
{
pasta1Uretilebilir = true;
}
else
{
pasta1Uretilebilir = false;
}
// Waiting for Receive-Event
if (waitHandle.WaitOne(50) && pasta1Uretilebilir)
this.Invoke(islemDelegatePasta1);
}
}
public void ThreadFuncPasta2(object parameter)
{
// While this mode is selected
while (true)
{
if (progressBarPasta2Seker.Value != 0 && progressBarPasta2Un.Value != 0 && progressBarPasta2Yag.Value != 0)
{
pasta2Uretilebilir = true;
}
else
{
pasta2Uretilebilir = false;
}
// Waiting for Receive-Event
if (waitHandle.WaitOne(50) && pasta2Uretilebilir)
this.Invoke(islemDelegatePasta2);
}
}
public void ThreadFuncPasta3(object parameter)
{
// While this mode is selected
while (true)
{
if (progressBarPasta3Seker.Value != 0 && progressBarPasta3Un.Value != 0 && progressBarPasta3Yag.Value != 0)
{
pasta3Uretilebilir = true;
}
else
{
pasta3Uretilebilir = false;
}
// Waiting for Receive-Event
if (waitHandle.WaitOne(50) && pasta3Uretilebilir)
this.Invoke(islemDelegatePasta3);
}
}
public void ThreadFuncTedarikci(object parameter)
{
// While this mode is selected
while (true)
{
if (unYagIste || unSekerIste || sekerYagIste)
{
tedarikYapilsin = true;
}
else
{
tedarikYapilsin = false;
}
// Waiting for Receive-Event
if (waitHandle.WaitOne(50) && tedarikYapilsin)
this.Invoke(islemDelegateTedarikci);
}
}
private void Pasta1Islemleri()
{
if (pasta1Sure == 0)
{
pasta1Sure = counterPasta;
}
else
{
int value = counterPasta - pasta1Sure;
if (value < 100)
{
progressPasta1.Value = value;
progressBarPasta1Yag.Value = 100 - value;
progressBarPasta1Seker.Value = 100 - value;
}
else
{
pasta1UretilenAdet += 1;
lblPasta1Uretilen.Text = pasta1UretilenAdet.ToString();
progressPasta1.Value = 0;
pasta1Sure = 0;
progressBarPasta1Yag.Value = 0;
progressBarPasta1Seker.Value = 0;
if (pasta1adet != pasta1UretilenAdet)
{
sekerYagIste = true;
}
}
}
}
private void Pasta2Islemleri()
{
if (pasta2Sure == 0)
{
pasta2Sure = counterPasta;
}
else
{
int value = counterPasta - pasta2Sure;
if (value < 100)
{
progressPasta2.Value = value;
progressBarPasta2Un.Value = 100 - value;
progressBarPasta2Seker.Value = 100 - value;
}
else
{
pasta2UretilenAdet += 1;
lblPasta2Uretilen.Text = pasta2UretilenAdet.ToString();
progressPasta2.Value = 0;
pasta2Sure = 0;
progressBarPasta2Un.Value = 0;
progressBarPasta2Seker.Value = 0;
if (pasta2adet != pasta2UretilenAdet)
{
unSekerIste = true;
}
}
}
}
private void Pasta3Islemleri()
{
if (pasta3Sure == 0)
{
pasta3Sure = counterPasta;
}
else
{
int value = counterPasta - pasta3Sure;
if (value < 100)
{
progressPasta3.Value = value;
progressBarPasta3Un.Value = 100 - value;
progressBarPasta3Yag.Value = 100 - value;
}
else
{
pasta3UretilenAdet += 1;
lblPasta3Uretilen.Text = pasta3UretilenAdet.ToString();
progressPasta3.Value = 0;
pasta3Sure = 0;
progressBarPasta3Un.Value = 0;
progressBarPasta3Yag.Value = 0;
if (pasta3adet != pasta3UretilenAdet)
{
unYagIste = true;
}
}
}
}
private void TedarikciIslemleri()
{
if (tedarikciSure == 0)
{
tedarikciSure = counterTedarik;
}
else
{
int value = counterTedarik - tedarikciSure;
int ister = 0;
if (unYagIste && !unSekerIsteAktif && !sekerYagIsteAktif )
{
ister = 3;
unYagIsteAktif = true;
lblTedarikciDurum.Text = "3. Pastacı için tedarik sağlanıyor";
}
else if (unSekerIste && !unYagIsteAktif && !sekerYagIsteAktif)
{
ister = 2;
unSekerIsteAktif = true;
lblTedarikciDurum.Text = "2. Pastacı için tedarik sağlanıyor";
}
else if (sekerYagIste && !unSekerIsteAktif && !unYagIsteAktif)
{
ister = 1;
sekerYagIsteAktif = true;
lblTedarikciDurum.Text = "1. Pastacı için tedarik sağlanıyor";
}
switch (ister)
{
case 1:
if (value < 100)
{
progressBarTedatikciSeker.Value = value;
progressBarTedatikciYag.Value = value;
}
else
{
progressBarTedatikciSeker.Value = 100;
progressBarTedatikciYag.Value = 100;
progressBarPasta1Seker.Value = 100;
progressBarPasta1Yag.Value = 100;
sekerYagIsteAktif = false;
sekerYagIste = false;
tedarikciSure = 0;
lblTedarikciDurum.Text = "Talep bekliyor...";
}
break;
case 2:
if (value < 100)
{
progressBarTedatikciSeker.Value = value;
progressBarTedatikciUn.Value = value;
}
else
{
progressBarTedatikciSeker.Value = 0;
progressBarTedatikciUn.Value = 0;
progressBarPasta2Seker.Value = 100;
progressBarPasta2Un.Value = 100;
unSekerIsteAktif = false;
unSekerIste = false;
tedarikciSure = 0;
lblTedarikciDurum.Text = "Talep bekliyor...";
}
break;
case 3:
if (value < 100)
{
progressBarTedatikciYag.Value = value;
progressBarTedatikciUn.Value = value;
}
else
{
progressBarTedatikciYag.Value = 0;
progressBarTedatikciUn.Value = 0;
progressBarPasta3Yag.Value = 100;
progressBarPasta3Un.Value = 100;
unYagIsteAktif = false;
unYagIste = false;
tedarikciSure = 0;
lblTedarikciDurum.Text = "Talep bekliyor...";
}
break;
default:
break;
}
}
}
private void timer_Tick(object sender, EventArgs e)
{
counterPasta++;
counterTedarik += 2;
waitHandle.Set();
}
private void btnAdetGirPasta1_Click(object sender, EventArgs e)
{
try
{
pasta1adet = int.Parse(txtPasta1Adeti.Text);
lblPasta1Uretilecek.Text = pasta1adet.ToString();
if (pasta1adet > pasta1UretilenAdet)
{
sekerYagIste = true;
}
}
catch (Exception)
{
}
}
private void btnAdetGirPasta2_Click(object sender, EventArgs e)
{
try
{
pasta2adet = int.Parse(txtPasta2Adeti.Text);
lblPasta2Uretilecek.Text = pasta2adet.ToString();
if (pasta2adet > pasta2UretilenAdet)
{
unSekerIste = true;
}
}
catch (Exception)
{
}
}
private void btnAdetGirPasta3_Click(object sender, EventArgs e)
{
try
{
pasta3adet = int.Parse(txtPasta3Adeti.Text);
lblPasta3Uretilecek.Text = pasta3adet.ToString();
if (pasta3adet > pasta3UretilenAdet)
{
unYagIste = true;
}
}
catch (Exception)
{
}
}
}
}
dostum dosyaların hiçbiri inmiyor. to download'dan sonra download butonuna basıyorum ancak tık yok :)
YanıtlaSilrapid share hepsini silmiş. Sen hangilerini istiyorsan o sayfalatın altına yorum yaz. Bu listedekilerin hepsini şimdi güncelledim :)
YanıtlaSil