示例#1
0
        static void Disposing(int toms)
        {
            Logger.Trace("Launching dispose monitor");
            var thread = new Thread(() =>
            {
                var dl = DateTime.Now.AddMilliseconds(toms);
                Logger.Trace("Dispose monitor DL {0}", dl.ToString("HH:mm:ss.fff"));
                while (true)
                {
                    if (DateTime.Now > dl)
                    {
                        throw ExceptionTools.Make("Timeout with dispose count {0}", Disposable.Undisposed);
                    }
                    if (Disposable.Undisposed == 0)
                    {
                        Logger.Trace("Dispose zero count detected");
                        Environment.Exit(0);
                    }
                    Thread.Sleep(100);
                }
            });

            thread.IsBackground = true;
            thread.Name         = "DisposeMonitor";
            thread.Start();
        }
示例#2
0
        public void WaitFor(int toms, string format, params object[] args)
        {
            var dl      = DateTime.Now.AddMilliseconds(toms);
            var pattern = TextTools.Format(format, args);

            while (true)
            {
                //Logger.Trace("POPPING for {0}", pattern);
                var line = input.Pop(1, null);
                //if (line == null) Logger.Trace("POP <NULL>");
                //if (line != null) Logger.Trace("POP {0}", line);
                //Beware | is regex reserved `or`
                if (line != null && Regex.IsMatch(line, pattern))
                {
                    break;
                }
                //if (DateTime.Now > dl) Logger.Trace("Timeout waiting for `{0}`", TextTools.Readable(pattern));
                if (DateTime.Now > dl)
                {
                    throw ExceptionTools.Make("Timeout waiting for `{0}`", TextTools.Readable(pattern));
                }
            }
        }