Ana içeriğe atla


C# THERET NEDİR ?

Windows işletim sisiteminin önemli özelliklerinden biri de multithreaded bir mimariye sahip olmasıdır. Peki multithreaded (çok kanallı) program ne demektir ? Genellikle proses ve thread kavramları birbirine karıştırılır. Derlenip çalıştırılan bir programa işletim sistemi içersinde yer alan bir proses denir. Örneğin bir hesap makinası programı ile resim programını ard arda çalıştıralım. Bu iki program işletim sistemi tarafından iki ayrı proses olarak ele alınır. Bu iki program birbirlerinin yaptığı işlemlere müdahale etmez. (İstersek prosesleri birbirlerine müdahale edecek şekilde programlayabiliriz. Genellikle bu istisnayi bir durumdur.) Her proses kendi bellek alanı içersinde koşmaya devam eder. Thread ise bir proses içersinde yer alan ve işlem yapan bir rutindir. Bir proses içersinde birden fazla thread var olabilir. Threadler genellikle bir proses içersinde ayrı kanallarda paralel olarak çalışması istenen metodların yürütülmesinde kullanılır


Threadler sayesinde ayrı metodları aynı anda çalıştırabiliriz. İşletim sistemi her thread’e çalışması için belli bir zaman aralığı verir. Bu zaman aralığı dolduğunda çalışan thread’den çıkılıp, program içersindeki diğer bir metoda veya başka bir thread’e girilir. Bir metod içersinde yapılan iş ne kadar uzun sürüyorsa o metodun bağlı olduğu thread’de o kadar fazla zaman harcanır. Bazen bu süre o kadar fazla olur ki, proses içersindeki başka bir thread’e çalışması için çok az zaman kalır. Başlatılan threadlerin aynı anda senkron bir şekilde çalışabilmesi için .NET’te senkronizasyon teknikleri kullanılır. Burada aynı andalığı (senkronizasyon) biraz açmamız gerekebilir. Örneğin üç tane kanalımız (thread) olsun. Her bir kanalda bir progressbar dolduruluyor olsun.


KOD:

namespace Multi_Threading2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            Control.CheckForIllegalCrossThreadCalls = false;
        }
        Thread th01;
        Thread th02;

        private void button1_Click(object sender, EventArgs e)
        {
            th01 = new Thread(Doldur01);

           
            th01.Start();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            th02 = new Thread(Doldur02);

           
            th02.Start();
        }

        private void Doldur01()
        {
            for (int i = 0; i < 1000000001; i++)
            {
                progressBar1.Value = i / 10000000;
            }
        }

        private void Doldur02()
        {
            for (int i = 0; i < 1000000001; i++)
            {
                progressBar2.Value = i / 10000000;
            }
        }

        private void btnBeklet01_Click(object sender, EventArgs e)
        {
            if (th01 != null && th01.IsAlive)
            {
                th01.Suspend();
            }
        }

        private void btnBeklet02_Click(object sender, EventArgs e)
        {
            if (th02 != null && th02.IsAlive)
            {
                th02.Suspend();
            }
        }

        private void btnDevam01_Click(object sender, EventArgs e)
        {
            if (th01 != null && th01.ThreadState == ThreadState.Suspended)
            {
                th01.Resume();
            }
        }

        private void btnDevam02_Click(object sender, EventArgs e)
        {
            if (th02 != null && th02.ThreadState == ThreadState.Suspended)
            {
                th02.Resume();
            }
        }

        private void btnDurdur01_Click(object sender, EventArgs e)
        {
            if (th01 != null && th01.IsAlive)
            {
                if (th01.ThreadState == ThreadState.Suspended)
                {
                    th01.Resume();
                }
                th01.Abort();
                progressBar1.Value = 0;
            }
        }

        private void btnDurdur02_Click(object sender, EventArgs e)
        {
            if (th02 != null && th02.IsAlive)
            {
                if (th02.ThreadState == ThreadState.Suspended)
                {
                    th02.Resume();
                }
                th02.Abort();
                progressBar2.Value = 0;
            }
        }
    }
}



Yorumlar

Bu blogdaki popüler yayınlar

İşletim Sistemleri Arasındaki Farklar

İşletim Sistemleri Arasındaki Farklar İşletim sistemi, bilgisayarda çalışan, bilgisayar donanım kaynaklarını yöneten ve çeşitli uygulama yazılımları için yaygın servisleri sağlayan bir yazılımlar bütünüdür. İşletim sistemi, uygulama kodları genellikle direkt donanım tarafından yürütülmesine rağmen, girdi-çıktı, bellek atama gibi donanım fonksiyonları için uygulama programları ve bilgisayar donanımı arasında aracılık görevi yapar. İşletim sistemleri sadece bilgisayar, video oyun konsolları, cep telefonları ve web sunucularında değil; arabalarda, beyaz eşyalarda hatta kol saatlerinin içinde bile yüklü olabilir. İşletim sistemleri işlevsellerinin genişliği ile değil, donanımı belli bir amaç doğrultusunda programlayabilme nitelikleriyle değerlendirilmelidir. En yaygın kullanılan işletim sistemlerine örnek olarak; Microsoft Windows, Mac OS X, Linux, Android ve iOS örnek verilebilir. DOS İşletim Sistemi Disk Operating System (DOS) bilgisayarlar için ufak ve basit bir işletim sistemi

KONDANSATÖR (KAPASİTÖR) NEDİR ?

KONDANSATÖR (KAPASİTÖR) Kondansatör, elektrik yükünü depolayan devre elemanlarıdır. Depolanan bu yük ihtiyaç olduğunda tekrar kullanılabilir. Kondansatörlerin birçok uygulamada kullanıldığını görmekteyiz . Güç kaynaklarında filtre amacıyla, ses yükseltilmelerinde katmanlar arasında kuplaj sağlamak ve etkin topraklama sağlamak amacıyla sıklıkla kullanılmaktadır .kondansatörün sembollerini ve şekli görünmektedir. KONDANSATÖR'ÜN YAPISI Kapasitörün iki adet iletken arasında yer alan yalıtkan ile oluşturulabileceğini söylemiştik. Yalıtkan kısım boş olabileceği gibi dielektrik özelliğe sahip bir maddeden de oluşabilir (örneğin kağıt, cam, plastik, seramik, mika vs). KONDANSATÖR'ÜN ÇALIŞMA PRENSİBİ Kapasitöre gerilim uygulandığında iletken plakalar birbirlerine göre ters ve eşit değere sahip elektrik yükü ile yüklenirler. Bu durum, plakalar arasında bir elektrik alan oluşmasına sebep olur. Bu iki plaka arasında yalıtkan maddeden dolayı herhangi bir

VirtualBox nedir ?

VirtualBox  İster normal bir son kullanıcı olun ister yazılım geliştiricisi isterseniz de sistem yöneticisi, sanallaştırma çözümlerine birçok aşamada ihtiyacınız mutlaka ama mutlaka olacaktır. Yazılımsal sanallaştırma da son derece başarılı hale geldiği için artık donanımsal sanallaştırma desteğinin olup olmaması can sıkan bir konu olmaktan çıkmış durumda. Sanallaştırma çözümleri ile 32-64 bit veya eski yeni hiç fark etmez, neredeyse bütün işletim sistemlerini  kullanıp test edebilir, sırf bir-iki yazılım sistemimizde çalışmıyor diye başka sistemleri kullanmak zorunda kalmayız. Ayrıca bir bilgisayarda çalışan birden çok işletim sisteminin sunacağı imkanlardan da yararlanmış oluruz. Başlayalım. Windows ortamında şu andaki güncel sürüm 4.1.4 ve makinemize sanal olarak Pardus 2011.2'yi kuralım. Windows ortamında anlattığıma bakmayın lütfen. Aşağıda belirttiğim yerden sonrası Linux için tamamen aynı. Windows kurulu makineler için resmi indirme bağlantımız: Linux