Example #1
0
        public void Delete(IBar bar)
        {
            IList <IBar> data = ticks;

            _lock.AcquireWriterLock(1000);
            try
            {
                int index;
                if (BarExists(bar, out index))
                {
                    data.RemoveAt(index);

                    if (changeFrom > index)
                    {
                        changeFrom = index;
                    }

                    --Count;
                    TicksFileSaver.Add4Save(this, data);
                }
            }
            finally
            {
                _lock.ReleaseWriterLock();
            }
        }
Example #2
0
        public void Add(IBar bar)
        {
            IList <IBar> data = ticks;

            // пытаюсь получить блокировку в течении 10 минут, скидывая Warn и Error если это дело затягивается
            int  count         = 0;
            bool exceptionFlag = true;

            while ((exceptionFlag) && (count < (10 * 60)))
            {
                exceptionFlag = false;
                try
                {
                    _lock.AcquireWriterLock(1000);
                }
                catch (ApplicationException)
                {
                    exceptionFlag = true;
                    ++count;
                    if (count > 10)
                    {
                        if (count > 60)
                        {
                            l.Error("Не могу получить блокировку для записи тика в течении " + count + " сек");
                        }
                        else
                        {
                            l.Warn("Не могу получить блокировку для записи тика в течении " + count + " сек");
                        }
                    }
                }
            }

            try
            {
                if ((lastBar == null) || (lastBar.DT < bar.DT) || ((lastBar.DT == bar.DT) && (lastBar.Number < bar.Number)))
                {
                    if (changeFrom > data.Count)
                    {
                        changeFrom = data.Count;
                    }

                    lastBar = bar;
                    data.Add(bar);
                }
                else
                {
                    if (lastBar.Number == bar.Number)
                    {
                        return;
                    }
                    else
                    {
                        int index;
                        if (!BarExists(bar, out index))
                        {
                            data.Insert(index, bar);
                            if (changeFrom > index)
                            {
                                changeFrom = index;
                            }
                        }
                        else
                        {
                            return;
                        }
                    }
                }
                ++Count;
#if FileTest
                ONLY4TEST_notGarbage = data;
#else
                TicksFileSaver.Add4Save(this, data);
#endif
            }
            finally
            {
                _lock.ReleaseWriterLock();
            }
        }
Example #3
0
 public void Stop()
 {
     TicksFiles.Save();
     TicksFileSaver.Stop();
 }