Exemplo n.º 1
0
        public void Run()
        {
            Util.message("Запустили поток по формулам");
            Context blcon = Server.getContext(Server.PointBlinds);

            do
            {
                tm          = DateTime.Now;
                Util.time   = tm;
                this.intime = tm.Ticks;
                int count = 0;
                for (int i = 0; i < blcon.Count; i++)
                {
                    //Util.message("i=" + i.ToString());
                    Context bc = Server.getContext(blcon.getChaild(i));
                    if (bc == null)
                    {
                        Util.errorMessage("Нет контеста формулы ", i.ToString()); return;
                    }
                    if (bc.Type != Util.TypeContext.Blinds)
                    {
                        Util.errorMessage("В контексте не формула ", i.ToString()); return;
                    }
                    Blind bb = (Blind)bc.defContext;
                    count += (bb.goBlind(intime))?1:0;
                }
                DateTime tmnow = DateTime.Now;
                int      st    = (int)((tmnow.Ticks - tm.Ticks) / 10000); // если превышено время обхода в 100 миллисекунд генерируется предупреждение с указанием колличества циклов
                if (st > steptime)
                {
                    Util.errorMessage(
                        "Предупреждение!!! Время цикла обработки [" +
                        st.ToString() +
                        "] превысило нормальное значение работы цикла [" +
                        steptime + "]; колличество циклов " + count + "\r\n", "MainLoop"); st = 0;
                }
                else
                {
                    st = steptime - st;
                }
                //Util.message("Ждем "+st.ToString());
                if (st > 0)
                {
                    Thread.Sleep(st);
                }
                Util.blink = !Util.blink;
            } while (true);
        }