示例#1
0
        static void Main(string[] args)
        {
            #region Grundlagen Threads
            //// Action a = new Action(MachEtwasInEinemThread);
            //// Action b = MachEtwasInEinemThread;


            //Thread t1 = new Thread(MachEtwasInEinemThread);
            ////  Thread t1 = new Thread(new ParameterizedThreadStart(MachEtwasInEinemThread));

            //Thread t2 = new Thread(MachEtwasInEinemThread2);

            //t1.Start();
            //t2.Start();

            ////Thread.Sleep(5000);
            //// Nach 5 sek: Thread beenden
            ////t1.Abort();
            ////t2.Abort();

            //// Auf einen Thread warten:
            //t1.Join();
            //t2.Join();
            #endregion

            #region Threadpool und Einstellungen
            //ThreadPool.QueueUserWorkItem(MachEtwasInEinemThread,12);
            //ThreadPool.QueueUserWorkItem(MachEtwasInEinemThread2,99);

            //// Einstellmöglichkeiten für Threads
            //Thread t1 = new Thread(MachEtwasInEinemThread);
            //t1.IsBackground = true;
            //t1.Priority = ThreadPriority.Normal;

            //t1.Start(42);
            #endregion

            #region Monitor
            //Console.OutputEncoding = Encoding.Unicode;

            //Konto meinKonto = new Konto();

            //for (int i = 0; i < 100; i++)
            //{
            //    ThreadPool.QueueUserWorkItem(ZufälligesKontoupdate, meinKonto);
            //}
            #endregion

            #region Mutex
            //Mutex mutex = new Mutex(false, "MeinMutex");

            //for (int i = 0; i < 100; i++)
            //{
            //    mutex.WaitOne();
            //    // hier darf wieder nur einer rein
            //    Thread.Sleep(100);
            //    Console.WriteLine(i);

            //    mutex.ReleaseMutex();
            //}
            #endregion

            #region Mit Mutex verhindern, dass die App mehrfach geöffnet wird
            //Mutex mutex = new Mutex(false, "MeinMutex");

            //var offen = mutex.WaitOne(100,false);

            //if(offen)
            //{
            //    // logik
            //    for (int i = 0; i < 1000; i++)
            //    {
            //        Console.Write("#");
            //        Thread.Sleep(100);
            //    }
            //}
            //else
            //{
            //    // beenden
            //    Console.WriteLine("Applikation ist bereits offen, beendet sich selbst in 5 sec");
            //    Thread.Sleep(5000);
            //    return;
            //}
            //mutex.ReleaseMutex();
            #endregion

            #region Semaphore
            SemaphoreZähler sz = new SemaphoreZähler();

            for (int i = 0; i < 500; i++)
            {
                Thread t1 = new Thread(sz.MachWas);
                t1.Start();
            }
            #endregion

            Console.WriteLine("---ENDE---");
            Console.ReadKey();
        }
示例#2
0
        static void Main(string[] args)
        {
            #region Threads
            ////Thread t1 = new Thread(Punkt);
            ////Thread t2 = new Thread(Strich);
            ////Thread t3 = new Thread(new ParameterizedThreadStart(Zeichen));

            ////// Werden beim Schließen der Appliaktion ebenfalls sofort beendet
            ////t1.IsBackground = true;
            ////t1.IsBackground = true;
            ////t3.IsBackground = true;

            ////t1.Start();
            ////t2.Start();
            ////t3.Start('#');

            ////Thread.Sleep(2000);
            ////// Thread beenden
            ////t1.Abort();
            ////// Auf Threads warten
            ////t2.Join();
            ////t3.Join();

            //// ThreadPool
            //// ThreadPool.QueueUserWorkItem(Punkt);
            //// ThreadPool.QueueUserWorkItem(Strich);
            // ThreadPool.QueueUserWorkItem(Zeichen,'@');
            #endregion

            #region Monitor und Lock
            //Console.OutputEncoding = Encoding.Unicode;

            //Konto k1 = new Konto(10_000);

            //for (int i = 0; i < 10; i++)
            //{
            //    ThreadPool.QueueUserWorkItem(ZufälligesKontoUpdate, k1);
            //}
            #endregion

            #region Mutex
            //Mutex mutex = new Mutex(false, "MeinMutex1234");

            //for (int i = 0; i < 100; i++)
            //{
            //    mutex.WaitOne();

            //    Thread.Sleep(100);
            //    Console.WriteLine(i);

            //    mutex.ReleaseMutex();
            //}
            #endregion

            SemaphoreZähler zähler = new SemaphoreZähler();

            for (int i = 0; i < 500; i++)
            {
                new Thread(zähler.MachWas).Start();
            }


            Console.WriteLine("---ENDE---");
            Console.ReadKey();
        }