예제 #1
0
        public static void Main(string[] args)
        {
            var stdin = new TTY(0);

            stdin.Read(Encoding.ASCII, (str) => {
                str = str.TrimEnd(new char[] { '\r', '\n' });
                if (str.StartsWith("fib "))
                {
                    int n;
                    if (!int.TryParse(str.Substring("fib ".Length), out n))
                    {
                        Console.WriteLine("Supply an integer to the fib command");
                        return;
                    }
                    TimeSpan span  = TimeSpan.Zero;
                    BigInteger res = 0;
                    Console.WriteLine("{0}: fib({1}) starting", span, n);
                    Loop.Default.QueueUserWorkItem(() => {
                        var stopwatch = Stopwatch.StartNew();
                        res           = Fibonacci(n);
                        stopwatch.Stop();
                        span = stopwatch.Elapsed;
                    }, () => {
                        Console.WriteLine("{0}: fib({1}) = {2}", span, n, res);
                    });
                }
                else if (str == "quit")
                {
                    Loop.Default.Stop();
                    stdin.Close();
                }
                else if (str == "help")
                {
                    Console.WriteLine("Available commands: ");
                    Console.WriteLine("fib <n:int> - start a thread which calculates fib");
                    Console.WriteLine("help - displays help");
                    Console.WriteLine("quit - quits the program");
                }
                else
                {
                    Console.WriteLine("Unknown command");
                }
            });
            stdin.Resume();
            Loop.Default.Run();
        }