Home > Allgemein > Multithreading

Multithreading

11. August 2009 admin

Multithreading kommt dann zum Zug wenn im Hintergrund mehrere Dinge gleichzeitig geschehen sollen. Dies kann die unterschiedlichsten Gründe haben. Ein bekannter Grund um Multithreading einzusetzen ist sicherlich der Umstand, dass das GUI nicht mehr auf Benutzereingaben reagiert, solange im Hintergrund eine komplexe Berechnung stattfindet. Um nun auf eine einfache Art und Weise zu zeigen wie Multithreading in C# funktioniert, habe ich eine kleine Konsolen-Applikation geschrieben. Diese führt immer den gleichen Code aus, mit dem Unterschied, dass man nach dem Starten der Anwendung wählen kann ob man im Multithreading-Modus weiterfahren möchte oder nicht. Das Programm gibt lediglich Outputs auf das Konsolenfenster. Durch diese Ausgabe ist klar ersichtlich, wann welcher Thread die Rechenzeit zugesprochen erhalten hat. Hat man das Multithreading eingeschaltet, wechseln sich die beiden Threads ab, während im “normalen” Modus alles nacheinander ausgegeben wird.

zip_icon


using System;
using System.Threading;

namespace MultiThreading
{
    class Program
    {
        static void Main(string[] args)
        {
            ConsoleKeyInfo keyAnswer;

            //Solange Fragen bis entweder Y oder N gedrückt wurde
            do
            {
                Console.Clear();
                Console.WriteLine("Möchten Sie die Applikation im Multithreading Modus starten? (Y/N)");
                keyAnswer = Console.ReadKey(true);
            }
            while (keyAnswer.Key != ConsoleKey.Y && keyAnswer.Key != ConsoleKey.N);

            //Je nach dem was gewählt wurde, die Methoden im entsprechenden Modus ausführen
            switch (keyAnswer.Key)
            {
                case ConsoleKey.Y:
                    //Threading Modus
                    Thread t1 = new Thread(new ThreadStart(ThreadOneOutput));
                    Thread t2 = new Thread(new ThreadStart(ThreadTwoOutput));
                    t1.Start();
                    t2.Start();
                    break;

                case ConsoleKey.N:
                    //Normaler Modus
                    ThreadOneOutput();
                    ThreadTwoOutput();
                    break;
            }

            //Wartet auf irgendeine Eingabe und beendet das Programm danach
            Console.ReadKey(true);

        }

        /// <summary>
        /// Methode welche als erster Thread ausgeführt werden kann
        /// </summary>
        private static void ThreadOneOutput()
        {
            for (int i = 1; i <= 50; i++)
            {
                Console.WriteLine("Thread 1: Output Nr. " + i.ToString());
            }
        }

        /// <summary>
        /// Methode welche als zweiter Thread ausgeführt werden kann
        /// </summary>
        private static void ThreadTwoOutput()
        {
            for (int i = 1; i <= 50; i++)
            {
                Console.WriteLine("Thread 2: Output Nr. " + i.ToString());
            }
        }
    }
}
KategorienAllgemein Tags:
Kommentare sind geschlossen