Пример #1
0
        static void Main(string[] args)
        {
            EventWaitHandle waitHandle = new ManualResetEvent(false);

            Worker worker1 = new Worker("Worker1", waitHandle);
            Worker worker2 = new Worker("Worker2", waitHandle);

            Console.WriteLine("press 'g' to start threads");
            Console.WriteLine("Press 'p' to pause threads");
            Console.WriteLine("Press 'q' to quit");

            Thread.Sleep(2000);

            worker1.Start();
            worker2.Start();

            while(true) {
                ConsoleKey key = Console.ReadKey(true).Key;
                switch(key) {
                    case ConsoleKey.G:
                        Console.WriteLine("starting...");
                        waitHandle.Set();
                        break;
                    case ConsoleKey.P:
                        Console.WriteLine("pausing...");
                        waitHandle.Reset();
                        break;
                    case ConsoleKey.Q:
                        Console.WriteLine("quitting...");
                        worker1.Stop();
                        worker2.Stop();
                        return;
                    default:
                        break;
                }
            }
        }
Пример #2
0
        static void Main(string[] args)
        {
            Semaphore waitHandle = new Semaphore(0, 5);

            Worker[] workers = new Worker[20];
            for(int i = 0; i < workers.Length; i++) {
                workers[i] = new Worker("Worker" + i, waitHandle);
            }

            Console.WriteLine("press '1-5' to signal threads");
            Console.WriteLine("Press 'q' to quit");

            Thread.Sleep(2000);

            Array.ForEach(workers, w => w.Start());

            while (true) {
                ConsoleKey key = Console.ReadKey(true).Key;
                switch (key) {
                    case ConsoleKey.D1:
                    case ConsoleKey.D2:
                    case ConsoleKey.D3:
                    case ConsoleKey.D4:
                    case ConsoleKey.D5:
                        Release(_consoleKeyMap[key], waitHandle);
                        break;
                    case ConsoleKey.Q:
                        Console.WriteLine("quitting...");
                        Array.ForEach(workers, w => w.Stop());
                        waitHandle.Release();
                        return;
                    default:
                        break;
                }
            }
        }