C# ile Thread Kullanimi

    Thread bilgisayar biliminde, bir programin kendini es zamanli birden fazla is parçasina ayirabilmesinin bir yoludur. Thread ve islem arasindaki fark bir isletim sisteminden digerine degismekle birlikte genel olarak thread olusturulusu ve kaynaklari paylasmasi açisindan process'den ayrilir. Çoklu thread'ler paralel olarak pek çok bilgisayar sisteminde uygulanabilir. Tek islemci kullanildigi durumlarda çok thread' li uygulama zaman dilimleme ile gerçeklestirilir; tek islemci fakli thread' lar arasinda çok hizli geçis yapar ve bu durumda islemler gerçekte olmasa bile es zamanli kosuluyormus izlenimi verir. Çok islemcili sistemlerde farkli thread' ler farkli islemciler üzerinde es zamanli olarak çalisabilir.
.

Pek çok modern isletim sistemi bir is düzenleyicisi yardimiyla hem zaman dilimleme hem de çok islemcili thread' lemeyi desteklemektedir. Isletim sistem çekirdegi (kernel) sistem çagrilari vasitasi ile programciya thread' leri kontrol etme imkâni saglamaktadir. Bunun yoklugunda programlar, zamanlayicilar, sinyaller veya diger yöntemleri kullanarak kendi çalismalarini sonlandirabilirler. Bunlara user-space thread' ler denir.

     Bizde yazdigimiz programlarda ayni anda birden fazla islem yaptirmak istiyorsak Threadleri kullanabiliriz. Farkli threadler ayni fonksiyonu kullanabilecegi gibi her thread farkli bir is yapan ayri fonksiyonlarida kullanabilir. Threadleri kullanarak basit bir uygulama yazalim.
.

Thread thread1 = new Thread(new ThreadStart(ProgressBar1Doldur));
Thread thread2 = new Thread(new ThreadStart(ProgressBar2Doldur));
Thread thread3 = new Thread(new ThreadStart(ProgressBar3Doldur));

thread1.Start();
thread2.Start();
thread3.Start();

Yukaridaki kodda gördügünüz gibi ilk olarak yeni bir thread olusturuyor ve bu threadin kullanacagi fonksiyonu da ThreadStart nesnesi içinde yaziyoruz. thread1.Start() dedigimiz zaman ThreadStart içine yazmis olugumuz kodlar ilgili thread tarafindan islenmeye baslar.

public void ProgressBar1Doldur()
{
    while (progressBar1.Value < 100)
    {
        progressBar1.Value += 1;
        Thread.Sleep(10);
    }
}

public void ProgressBar2Doldur()
{
    while (progressBar2.Value < 100)
    {
        progressBar2.Value += 1;
        Thread.Sleep(60);
    }
}

public void ProgressBar3Doldur()
{
    while (progressBar3.Value < 100)
    {
        progressBar3.Value += 1;
        Thread.Sleep(50);
    }
}

.
Her thread olusturulurken belirlenmis olan fonksiyon içindeki kodlari çalistirir ve fonksiyonda ki islemler bittigi zaman otomatik olarak sonlanir.

Asagidaki formu dizaynini yapip yukaridaki gibi bir kod yazar ve derlerseniz “Çapraz is parçacigi islemi geçerli degil: 'progressBar1' denetimine olusturuldugu is parçacigi disinda baska bir is parçacigindan erisildi.” Diye bir hata alirsiniz. Bunun sebebi threadlerin senkronlanmadigindandir. Bir threadin kullandigi bir nesneye baska bir thread erismeye çalistigi anda yukaridaki hatayi alirsiniz. Bu hatayi almamak için threadleri senkron olarak çalistirmaniz gerekiyor. Threadleri senkron olarak çalistirma konusuna daha sonra girecegiz. Simdili yukaridaki hatayi engellemek için threadleri çalistirmadan ince asagidaki kodu ekleyin.

System.Windows.Forms.Form.CheckForIllegalCrossThreadCalls = false;
 
Thread thread1 = new Thread(new ThreadStart(ProgressBar1Doldur));
Thread thread2 = new Thread(new ThreadStart(ProgressBar2Doldur));
Thread thread3 = new Thread(new ThreadStart(ProgressBar3Doldur));

thread1.Start();
thread2.Start();
thread3.Start();

Örnek uygulamamizi buradan indirebilirsiniz.

Tags:

11 thoughts on “C# ile Thread Kullanimi

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir