C Sharp Programlama Dili/Çok kanallı uygulamalar

Vikikitap, özgür kütüphane
Ders 39. Çok kanallı uygulamalar


Farkındaysanız şimdiye kadar yazdığımız kodlar satır satır çalıştırılıyordu ve bir satırın işlemi bitmeden öteki satıra geçilmiyordu. Örneğin;

 Metot1();
 Metot2();

Burada birinci metottaki bütün kodlar çalıştırılmadan ikinci metot çalışmaya başlamaz. Ancak bu derste göreceğemiz çok kanallı uygulama (multi-threading) geliştirme teknolojisiyle bu iki metodun aynı zamanda çalışmaya başlamasını sağlayabileceğiz. Yani bilgisayarımızın işlemcisi aynı anda iki işlem yapacak. Çok kanallı uygulama geliştirme teknolojisini genellikle arka planda sürekli çalışmasını istediğimiz bir program parçacığı varsa kullanırız. Örneğin bir anti virüs yazılımının gerçek zamanlı koruma yapabilmesi için thread teknolojisini kullanması gerekir. C#'ta çok kanallı uygulamalar ile ilgilenen sınıflar System.Threading isim alanındadır. Şimdi bir örnek yapayım ve konuyu bu örnek üzerinde anlatayım:

  • Önce bir Windows projesi açın.
  • Forma iki ListBox, bir Label, bir de Button getirin.
  • Birinci ListBox'a her saniye de bir öge eklenecek, bu ögeler de 1, 2, 3, ... diye gidecek.
  • İkinci ListBox'a her iki saniye de bir öge eklenecek, bu ögeler de 10, 20, 30, ... diye gidecek.
  • Label'da şu anki saat saat:dakika:saniye formatında olacak ve sürekli güncel olacak.
  • Son olarak butona basıldığında bütün bu sürekli değişen şeyler durdurulacak. Yani Label'ın saati butona basıldıktan sonra hep aynı kalacak. ListBox'lara da butona basıldıktan sonra öge ekleme durdurulacak.
  • Artık kodları yazmaya başlayabiliriz. Kodlarımızı görsellikle değil, kodlarla ilgilenen dosya olan Form1.cs dosyasındaki Form1 sınıfına yazacağız. Bu dosyayı ve sınıfı forma sağ tıklayıp "View Code"u tıklayarak açabilirsiniz.
 Thread islem1; //Daha önce using bildirimlerine "using System.Threading;" satırını ekleyin.
 Thread islem2;
 Thread islem3;
 private void Form1_Load(object sender, EventArgs e) //Bu metodu yazarak değil, forma çift tıklayarak oluşturun. 
 {                                                   //Böylelikle metot otomatik olarak formun Load olayına bağlanır.
    Form1.CheckForIllegalCrossThreadCalls = false;   //Tabii ki metodun içeriğini kendiniz yazacaksınız.
    islem1=new Thread(new ThreadStart(metot1));      
    islem2=new Thread(new ThreadStart(metot2));
    islem3=new Thread(new ThreadStart(metot3));
    islem1.Start();
    islem2.Start();
    islem3.Start();
 }
 int i=0;
 int j=0;
 void metot1() //Bu, listBox1'e her saniyede 1, 2, 3, ... şeklinde öge ekleyecek metot.
 {
    while(true)
    {
       listBox1.Items.Add(++i);
       Thread.Sleep(1000);
    }
 }   
 void metot2() //Bu, listBox2'ye her iki saniyede 10, 20, 30, ... şeklinde öge ekleyecek metot.
 {
    while(true)
    {
       listBox2.Items.Add(10*j++);
       Thread.Sleep(2000);
    }
 } 
 void metot3() //Bu, label1'e o anki saati saat:dakika:saniye formatında güncel olarak yazan metot.
 {
    while(true)
       label1.Text=DateTime.Now.ToLongTimeString();
 }
 private void button1_Click(object sender, EventArgs e)//Bu metodu yazarak değil, butona çift tıklayarak oluşturun.
 {                                                     //Böylelikle metot otomatik olarak butonun Click olayına bağlanır.
    islem1.Abort();                                    //Tabii ki metodun içeriğini kendiniz yazacaksınız.
    islem2.Abort();
    islem3.Abort();
 }

Bu programdaki Form1.CheckForIllegalCrossThreadCalls = false; satırıyla derleyicinin bu şekilde thread kullanılmasına izin vermiş olduk. Metotların içindeki komutları sonsuz bir döngü içinde yazarak ilgili komutların bir kere çalışıp sonlanmak yerine sonsuza kadar çalışmasını sağladık. Thread sınıfının static Sleep() metoduyla programın istenilen süre zarfında hiçbir şey yapmadan beklemesini sağladık. Buradaki en önemli nokta olarak da yeni Thread nesneleri oluşturduk, bu nesneleri metotlarımızla ilişkilendirdik. Thread sınıfının static olmayan Start() ve Abort() metotlatıyla da Thread nesnelerinin temsil ettikleri metotların çalışmasını başlatıp durdurduk.

Son not[değiştir]

Artık kitap bitti. Artık C# dilini tam anlamıyla bildiğinizi düşünüyorum. Ancak C# ile .NET Framework kütüphanesi farklı kavramlardır. Bu kitap boyunca asıl anlatılmak istenen C# dilidir. .NET kütüphanesini kullanabileceğiniz tek dil C# değildir. C# dışında Visual Basic.NET, C++.NET, J# vb. birçok dille .NET Framework kütüphanesinden faydalanabilirsiniz. Ancak C#, .NET Framework kütüphanesi için Microsoft tarafından özel olarak sıfırdan geliştirilmiş bir dildir. C# ile .NET Framework kütüphanesini diğer dillere oranla çok daha efektif şekilde kullanırsınız. .NET Framework kütüphanesi hakkında daha fazla bilgi istiyorsanız Microsoft'un MSDN kütüphanesini kullanabilirsiniz. Sitede sol taraftaki ağaç görünümlü menüden .NET Development -> .NET Framework 4 -> .NET Framework Class Library yolunu izleyerek bu kitap boyunca özet olarak verilen sınıf bilgilerine ayrıntılı olarak erişebilirsiniz.

Bu kitabın diğer sayfaları
  • Sınıflar
  • Operatör aşırı yükleme
  • İndeksleyiciler
  • Yapılar
  • Enum sabitleri
  • İsim alanları
  • System isim alanı
  • Temel I/O işlemleri
  • Temel string işlemleri
  • Kalıtım
  • Arayüzler
  • Partial (kısmi) tipler
  • İstisnai durum yakalama mekanizması
  • Temsilciler
  • Olaylar
  • Önişlemci komutları
  • Göstericiler
  • Assembly kavramı
  • Yansıma
  • Nitelikler
  • Örnekler
  • Şablon tipler
  • Koleksiyonlar
  • yield
  • Veri tabanı işlemleri
  • XML işlemleri
  • Form tabanlı uygulamalar
  • Visual Studio.NET
  • Çok kanallı uygulamalar
  • ASP.NET