Facebook RSS Feed
 

.NET Micro Framework'de Multi Threading

Micro Framework ile thread'ler oluşturup aynı anda birden çok işlem yapabiliriz. Başlangıçta .NET MF uygulamamız "main" thread'i ile başlar. Tek işlemcili bir sistemde çalıştığımız için, biz yeni thread'ler oluşturdukça işlemci zamanı bu thread'lere eşit miktarda dağıtılır ve herbiri peşpeşe işler. Varsayılan olarak her 20 milisaniyede bir sonraki thread'e geçilir. Thread önceliğini (priority) ayarlayarak thread başına düşen işlemci zamanını değiştirebiliriz. Bu sayede kritik işlemlere, arka plan işlemlerinden daha çok işlemci zamanı ayırmış oluruz.

Thread Oluşturmak

.NET Micro Framework uygulamamızdaki program.cs dosyasının namespace'leri arasına System.Threading'i ekleyerek uygulamamızda Thread oluşturmaya başlayabiliriz.

using System;
using System.Threading;
using Microsoft.SPOT;
 
namespace MFThreading
{
    public class Program
    {
        public static void Main()
        {
            Thread thread1 = new Thread(thread1Metodu); // thread1 adında thread oluşturduk
            thread1.Start();                            // thread1'i başlattık
            Thread.Sleep(Timeout.Infinite);             // main thread'i uyuttuk
        }
 
        private static void thread1Metodu()           // thread1'in çalıştıracağı metodlar
        {
            Debug.Print("Thread 1 Basladi");
            while (true)
            {
                Debug.Print("Thread 1");
                Thread.Sleep(500);
            }
        }
    }
}

Aynı şekilde, projemize birden fazla thread de ekleyebiliriz.

using System;
using System.Threading;
using Microsoft.SPOT;
 
namespace MFThreading
{
    public class Program
    {
        public static void Main()
        {
            Thread thread1 = new Thread(thread1Metodu); // thread1 adında thread oluşturduk
            Thread thread2 = new Thread(thread2Metodu); // thread2 adında thread oluşturduk
            thread1.Start();                            // thread1'i başlattık
            thread2.Start();                            // thread2'yi başlattık
            Thread.Sleep(Timeout.Infinite);             // main thread'i uyuttuk
        }
 
        private static void thread1Metodu()           // thread1'in çalıştıracağı metodlar
        {
            Debug.Print("Thread 1 Basladi");
            while (true)
            {
                Debug.Print("Thread 1");
                Thread.Sleep(500);
            }
        }
 
        private static void thread2Metodu()           // thread2'nin çalıştıracağı metodlar
        {
            Debug.Print("Thread 2 Basladi");
            while (true)
            {
                Debug.Print("Thread 2");
                Thread.Sleep(500);
            }
        }
    }
}

Uygulamayı çalıştırdığımızda, Visual Studio Immediate Window'da thread'lerin çalıştığını göreceğiz.

Thread 1 Basladi
Thread 1
Thread 2 Basladi
Thread 2
Thread 1
Thread 2
Thread 1
Thread 2
Thread 1
Thread 2

Thread Önceliklerini Belirlemek

Thread'lerin priority değerlerini değiştirerek, her birine ayrılan işlemci zamanını ayarlayabiliriz.

thread1.Priority = ThreadPriority.Highest;
thread2.Priority = ThreadPriority.Lowest;

Örneğin, biri highest, diğeri lowest priority değerine sahip iki thread'imiz olsun. Yüksek öncelikli thread'e, diğerine oranla iki kat işlemci zamanı ayrılacaktır.

Thread'leri Dondurmak ve Devam Ettirmek

Bir thread'i geçici bir süre veya tamamen dondurabiliriz ve kaldığı yerden devam ettirebiliriz.

Thread.CurrentThread.Suspend(); // O anda çalışan thread'i dondurur
Thread.Sleep(Timeout.Infinite); // Thread'i sonsuza kadar uyutur
Thread.Sleep(-1);               // Thread'i sonsuza kadar uyutur
 
thread1.Suspend();              // Belirtilen thread'i dondurur
thread1.Resume();               // Belirtilen thread'i uyandırır

Bir thread'i suspend komutuyla dondurduğunuz an, o thread hemen durmaz. Kendisine ayrılan 20 milisaniye tamamlandıktan sonra uyandırılana kadar donmuş olur.




 
Hoşgeldiniz!
Son güncelleme: 25.12.2016
-
Yeni Teknik Yazılar
Latte Panda İncelemesi
Turta IoT HAT İncelemesi
USB Gamepad Kullanımı
GPIO Kullanımı
VEML6075 UV Sensör Kullan...
-
İlgili Gruplar
.NET MF ve Gadgeteer FB Grubu
İst. IoT & Wearables Meet-up
-
 

This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.Copyright © 1999 - 2017, Umut Erkal. Bu materyal, "Creative Commons Public Licence" ile sunulmuştur.
Kaynak göstererek ve ücretsiz olarak, aynı şartlar altında paylaşabilir ve kullanabilirsiniz. | Kullanım Sözleşmesi