Csharp Kanallarda Öncelik Sırası
-
Csharp Kanal Öncelik Sırasının Kontrolü
Aşağıda kanalların birbirleriyle ilişkili olarak çalışmasına örnek verilmiştir. Birkaç kanal birlikte çalışırken önemli noktalardan bir taneside kanallardan bir tanesine öncelik verilmesidir. Aşağıdaki örnekte kanallara öncelik verilmemiş olup. Kanallar aynı oranda çalışmaktadır.. Kanal önceliği bir kanalı durdurup diğer kanalı çalıştırmaz. Sadece ayarlanan kanalın önceliği daha yüksek olduğu için işlemci o kanala daha fazla ilgi ve alaka göstererek
bu kanalı daha çok çalıştırır..Bu arada programın çalışma mantığı şöyle işlemektedir.
1 ‘den 1.Texbox ‘a girdiğimiz sayıya kadar, -500 ‘den de 2.Texbox ‘a girilen sayıya kadar sırasıyla ayrı kanallarda listbox ‘a ekleme yapılıyor. Thread kullandığımız için daha önceki makalelerimizde de bahsettiğimiz üzere formumuzda donma gibi olaylar meydana gelmeyecektir. Form üzerinde her türlü işlem kontrolümüz altında olacaktır.
Şimdi örneğimizi inceleyelim..1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
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 CrossThread2 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } Thread Kanal1; Thread Kanal2; delegate void myDelegate(string yazi); // Kanallar devreye girerek işlemi başlatıyor.. private void button1_Click(object sender, EventArgs e) { ThreadStart basla = new ThreadStart(kanalislem); ThreadStart basla2 = new ThreadStart(kanalislem2); Kanal1 = new Thread(basla); Kanal2 = new Thread(basla2); Kanal1.Start(); Kanal2.Start(); } private void kanalislem() { for (int i = -500; i < Int32.Parse(textBox1.Text); i++) islemyaz(i.ToString()); } // kanal islem methodu islemyaz methodunu tetikliyor.. private void islemyaz(string gelenkelime) { if (this.listBox1.InvokeRequired) { myDelegate mydel = new myDelegate(islemyaz); this.listBox1.Invoke(mydel, new object[] { gelenkelime }); } else { listBox1.Items.Add(gelenkelime); } } private void kanalislem2() { for (int i = 0; i < Int32.Parse(textBox2.Text); i++) islemyaz2(i.ToString()); } // kanal islem methodu islemyaz methodunu tetikliyor.. private void islemyaz2(string gelenkelime2) { if (this.listBox1.InvokeRequired) { myDelegate mydel2 = new myDelegate(islemyaz2); this.listBox1.Invoke(mydel2, new object[] { gelenkelime2 }); } else { listBox1.Items.Add(gelenkelime2); } } private void button2_Click(object sender, EventArgs e) { listBox1.Items.Clear(); } } }
Şimdi farkı anlamanız için ThreadPriority değerinden faydalanarak örneğimizi biraz değiştireceğiz. Ve farkı göreceğiz…
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
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 CrossThread2 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } Thread Kanal1; Thread Kanal2; delegate void myDelegate(string yazi); // Kanallar devreye girerek işlemi başlatıyor.. private void button1_Click(object sender, EventArgs e) { ThreadStart basla = new ThreadStart(kanalislem); ThreadStart basla2 = new ThreadStart(kanalislem2); Kanal1 = new Thread(basla); Kanal2 = new Thread(basla2); Kanal1.Priority = ThreadPriority.Highest; // Bunu daha çok seviyor :) Kanal2.Priority = ThreadPriority.Lowest; Kanal1.Start(); Kanal2.Start(); } private void kanalislem() { for (int i = -500; i < Int32.Parse(textBox1.Text); i++) islemyaz(i.ToString()); } private void islemyaz(string gelenkelime) { if (this.listBox1.InvokeRequired) { myDelegate mydel = new myDelegate(islemyaz); this.listBox1.Invoke(mydel, new object[] { gelenkelime }); } else { listBox1.Items.Add(gelenkelime); } } private void kanalislem2() { for (int i = 0; i < Int32.Parse(textBox2.Text); i++) islemyaz2(i.ToString()); } private void islemyaz2(string gelenkelime2) { if (this.listBox1.InvokeRequired) { myDelegate mydel2 = new myDelegate(islemyaz2); this.listBox1.Invoke(mydel2, new object[] { gelenkelime2 }); } else { listBox1.Items.Add(gelenkelime2); } } private void button2_Click(object sender, EventArgs e) { listBox1.Items.Clear(); } } }
Örneğin sonucunda alınan ekran görüntüsü…

Csharp ThreadPriority
Csharp ThreadPriority Örneği
Warning: Unexpected character in input: ''' (ASCII=39) state=1 in /home/xdelete/public_html/forum/cache/data_c1176e3b86b838cc919e441a620ca4b6-SMF-modSettings.php on line 1
Parse error: syntax error, unexpected ':' in /home/xdelete/public_html/forum/cache/data_c1176e3b86b838cc919e441a620ca4b6-SMF-modSettings.php on line 1

