Bu site emekli olmuştur. Arşiv amaçlı olarak BT AKADEMİ sponsorluğunda yayın hayatına devam etmektedir.




C#nedir?com
 
YAZAR HAKKINDA
Caner Şahan
Caner Şahan
http://www.csharpnedir.com/
İletişme geçmek için tıklayın.
24 Makalesi yayınlanmakta.
Yazar hakkında detaylı bilgi için tıklayın.
Yayınlanan diğer makaleleri için tıklayın.
İlgili etiketler: belirli delegate ekledigimiz isaret isimli method methodu milisaniye oldugunu public sonradan static thread thread’ uygulama C# / VC#/.NET Caner Şahan
 
YAZI HAKKINDA
Türü : Makale
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
Seviyesi : İleri
Kategori : C# / VC#/.NET
Yayınlanma Tarihi : 4.10.2004
Okunma Sayısı : 30496
Yorum Sayısı : 0     yorum yaz
Site İçi AramaSİTE İÇİ ARAMA
Üye Girişini AçÜye GİRİŞİ
Üye girişi için tıklayın.
Kullanıcı Adı
Şifre
 
Beni her zaman hatırla
Bir hafta boyunca kullanıcı bilgilerinizi kullanıcı çıkışı yapana kadar hatırlar. (Paylaşılan bilgisayarlarda önerilmez.)
 
Şifremi / Kullanıcı Adımı unuttum.
 
.net TV RSS Serbest KÖŞE (?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
emre TAŞ
Silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
Makale Gönder Bende Yazmak İstiyorum
.net TV RSSBlogroll
Turhal Temizer
Conda install environment.yml Package 22.11.2024
Turhal Temizer
Mac OS/X Removing CUDA 22.11.2024
Burak Selim Şenyurt
Rust ile ECS Yaklaşımını Anlamak 22.11.2024
Burak Selim Şenyurt
Birlikte Rust Öğrenelim Serisi 22.11.2024
  Diğer Herşey
Sponsorlar
BT Akademi
Medya Portakal
Video Hosting Sponsoru
Csharpnedir.com bir Ineta üyesidir
Uzman Abi
Her Yönüyle C# - Sefer Algan
ThreadPool Sınıfının Kullanımı
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon
Bazı uygulamalara sonradan yani relase aşamasından sonra birkaç özellik eklenmek istenebilir. Diyelimki bir uygulama yazdık ve uygulamayı kullanan kurum bizden bu uygulamanın üzeride msn messenger gibi çalışan bir özellik istedi. Haliyle programı yazarken daha önceki programa yeni programımızın bazı özelliklerini eklememiz gerekecek. Daha önceki programımızda 2 tane thread oldugunu düşünelim. Sonradan ekleyeceğimiz thread ne zaman, hangi sırada çalışacak gibi sorular aklımıza geliyor hemen? İşte bu noktada imdadımıza ThreadPool isimli static sınıf yetişiyor. ThreadPool sınıfına eklediğimiz methodlar, belirli kurallara göre threadleniyor. Örneğin; en son eklediğimiz methodun havuz (ThreadPool) içindeki sırası son sıra olur. Havuz içerisindeki methodlar teker teker ve sırayla gezilirken işletilir (uyumayanlar-sleepler hariç işletilir) .ThreadPool’ e işaret edeceğimiz methodu WaitCallback isimli delegate ile belirtebiliriz. ThreadPool’ e yeni bir method eklemek için kullanmamız gerekenleri bir örnekle açıklayayım.

ThreadPool soslu cipslerin bulunduğu kap
WaitCallback cips sosumuz
Thread bir adet cipsimiz
Methodlar cipsin hammaddesi(patates)
Evet, şimdi elinizde bir paket cips varmış gibi hayal edin yada gidip alın:). Cipsi yemek için öncelikle patatesten veya mısırdan yapılmış olması gerekiyor. (Yani methodlardan bahsediyorum. Elimizde thread’ leyeceğimiz method yoksa bu işin hiç bir anlamı yok.) Tamam elimizde bir paket cipsin olduğunu düşünelim. Ama cips bu kuru kuru gitmiyor değil mi! Bunu hazırlamış olduğumuz sosumuza daldıralım. (Yani WaitCallback sosumuzda bir delegate olduğuna göre bizim fonksiyonumuzu işaret ediyor olacaktır.) Cipslerden birini kabımızın içinden alıp yediğimizi düşünelim. Burdaki her bir cips bir adet Thread’ den başka bir şey değildir. Yani ThreadPool.QueueUserWorkItem methodunu kullanarak thread’ leri kullanmaya başlıyoruz. İşte bu kadar cipsimizi alıp bir güzel mideye indirdik.

using System;
using System.Threading;

public class threadingpool
{
    static Thread thread;
    static WaitCallback ekle;
    public static void Main()
    {
         Console.WriteLine("Program Çalışmaya başladı.");
         Console.WriteLine("Programda devam etmek için bir tuşa basınız");
         Console.ReadLine();
         ekle=new WaitCallback(defaulT);
         ThreadPool.QueueUserWorkItem(ekle);
         Console.ReadLine();
    }    public static void defaulT(object target)
    {
    thread=Thread.CurrentThread;
     while(true)
       {
          int beklemezamani=rnd.Next(1000);
          Console.WriteLine("Ben [DEFAULT] olarak çalışanım şu anda {0:d} milisaniye durdum",beklemezamani);
            try
              {
               Thread.Sleep(beklemezamani);
              }
            catch(ThreadAbortException)
              {
               Console.WriteLine("Thread iptal edildi");
              }
       }
    }    public static void method1(object target)
    {
         thread=Thread.CurrentThread;
         while(true)
            {
             int beklemezamani=rnd.Next(1000);
             Console.WriteLine("Ben [METHOD1]---> şu anda {0:d} milisaniye durdum",beklemezamani);
                 try
                   {
                     Thread.Sleep(beklemezamani);
                   }
                 catch(ThreadAbortException)
                   {
                     Console.WriteLine("Thread iptal edildi");
                   }
            }
    }
    public static void method2(object target)
    {          thread=Thread.CurrentThread;
          while(true)
            {
              int beklemezamani=rnd.Next(1000);
              Console.WriteLine("Ben [METHOD2]---> şu anda {0:d} milisaniye durdum",beklemezamani);
              try
                {
                  Thread.Sleep(beklemezamani);
                }
              catch(ThreadAbortException)
                {
              Console.WriteLine("Thread iptal edildi");
                }
           }
    }
    public static void method3(object target)
    {
          while(true)
            {
              int beklemezamani=rnd.Next(1000);
              Console.WriteLine("Ben [METHOD3]---> şu anda {0:d} milisaniye durdum",beklemezamani);
              try
               {
                 Thread.Sleep(beklemezamani);
               }
              catch(ThreadAbortException)
               {
                  Console.WriteLine("Thread iptal edildi");
               }
           }
    }
}
Kodları incelersek, ekle isimli WaitCallback isimli delegate DefaulT isimli methodu işaret ediyor.Yani defaulT methodu içinde patates cips haline dönüşmüş(thread.Thread.CurrentThread). Daha sonra sosa batırılıp mideye....( ThreadPool.QueueUserWorkItem(ekle);)

Programımızın çalışmasını incelersek;



Program çalıştığı zaman dikkat ederseniz belirli bir sıra ile gelmiyor, gelmeye çalışıyor. Yani havuzun içinde dolaşırken uyuyan bir thread varsa onu atlıyor ve diğerine geçiyor. Bunu bekleme sürelerine bakarak anlayabilirsiniz.

Örnek uygulama için tıklayın.

Makale:
ThreadPool Sınıfının Kullanımı C#, Visual C# ve .NET Caner Şahan
  • Yazılan Yorumlar
  • Yorum Yaz
Bu konu hakkında yayınlanan yorum bulunmamaktadır.
"Yorum Yaz" tabını kullanarak sizde yorumlarınızı yazabilirsiniz.
Yorum yazabilmek için üye girişi yapmalısınız. Üye girişi için tıklayın.
Üye değilseniz Üyel Ol linkine tıklayarak üyeliğinizi hemen başlatabilirisniz.
 
  • Bu Konuda Son 10
  • Eklenen Son 10
  • Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor