Bu site emekli olmuştur. Arşiv amaçlı olarak
BT AKADEMİ
sponsorluğunda yayın hayatına devam etmektedir.
Ana Sayfa
.net TV
Makaleler
Kaynak Kod
Haberler
Serbest Köşe
Canlı Köşe
Forum
C#nedir?
Ekibimiz
RSS
ASP.NET
C# / VC#/.NET
Mono ve .NET
Yazılım Müh.
YAZAR HAKKINDA
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ı
:
30486
Yorum Sayısı
:
0
yorum yaz
SİTE İÇİ ARAMA
Ü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.
C#nedir? hesabınız yok mu?
Üye olabilmek için
tıklayın
.
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.
Silindi
emre TAŞ
yazının devamı >
silindi
emre TAŞ
yazının devamı >
silindi
emre TAŞ
yazının devamı >
silindi
emre TAŞ
yazının devamı >
silindi
emre TAŞ
yazının devamı >
Bende Yazmak İstiyorum
Blogroll
Turhal Temizer
Conda install environment.yml Package
21.11.2024
Turhal Temizer
Mac OS/X Removing CUDA
21.11.2024
Burak Selim Şenyurt
Rust ile ECS Yaklaşımını Anlamak
21.11.2024
Burak Selim Şenyurt
Birlikte Rust Öğrenelim Serisi
21.11.2024
Diğer Herşey
»
Makaleler RSS
»
Video Gönder
»
Makale Gönder
»
Serbest Köşeye Yazı Gönder
»
Yazar Başvurusu
»
C#nedir? Ekibinde Olmalıyım!
Sponsorlar
Ana Sayfa
/
Makaleler
/
Caner Şahan
/
C# / VC#/.NET
/
ThreadPool Sınıfının Kullanımı
ThreadPool Sınıfının Kullanımı
Favorilerime Ekle
Gönderiliyor lütfen bekleyin...
arkadaşıma gönder
Arkadaşınızın email adresi:
*
Mesajınız:
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
Dizayn ve Kodlama
bt
akademi
. Tüm Hakları Saklıdır © Copyright 2002-2009 c#nedir?com
Makaleler
Serbest Köşe
Makale Gönder
.Net TV
Video Gönder
Canlı Köşe
Kaynak Kod
Forum
Haberler
Röportajlar
Anketler
C# Nedir?
İletişim
Site Haritası
RSS
Favorilere Ekle
Üyelik
Hesap Aktivasyon
Ekibimiz
Ekibe Katıl