예제 #1
0
        // ==========
        // 07.12.2011
        /// <summary>
        /// Выборка точек из буфера в заданном интервале времени
        /// </summary>
        /// <param name="start">Время начала интервала</param>
        /// <param name="finish">Время конца интервала</param>
        /// <returns>Массив отобранных точек</returns>
        private GraphicValue[] GetValues(DateTime start, DateTime finish)
        {
            if (slim.TryEnterReadLock(300))
            {
                try
                {
                    if (values != null && values.Count > 0)
                    {
                        // Поиск начала и конца массива
                        if (values[0].Time > finish)
                        {
                            return(null);
                        }
                        int jCount = values.Count;
                        if (values[jCount - 1].Time < start)
                        {
                            return(null);
                        }

                        int j1 = -1;
                        for (int j = 0; j < jCount; j++)
                        {
                            if (values[j].Time <= start)
                            {
                                continue;
                            }
                            j1 = j;
                            break;
                        }
                        if (j1 == -1)
                        {
                            return(null);
                        }
                        int j2 = j1;
                        for (int j = j1 + 1; j < jCount; j++)
                        {
                            if (values[j].Time > finish)
                            {
                                break;
                            }
                            j2 = j;
                        }

                        // копирование выделенного участка данных
                        GraphicValue[] tmp  = new GraphicValue[j2 - j1 + 1];
                        int            jPos = 0;
                        for (int j = j1; j <= j2; j++)
                        {
                            tmp[jPos] = values[j];
                            jPos++;
                        }

                        return(tmp);
                    }
                }
                finally
                {
                    slim.ExitReadLock();
                }
            }

            return(null);
        }
예제 #2
0
파일: Graphic.cs 프로젝트: slawer/sgt
        // ==========
        // 07.12.2011
        /// <summary>
        /// Выборка точек из буфера в заданном интервале времени
        /// </summary>
        /// <param name="start">Время начала интервала</param>
        /// <param name="finish">Время конца интервала</param>
        /// <returns>Массив отобранных точек</returns>
        private GraphicValue[] GetValues(DateTime start, DateTime finish)
        {
            if (slim.TryEnterReadLock(300))
            {
                try
                {
                    if (values != null && values.Count > 0)
                    {
                        // Поиск начала и конца массива
                        if (values[0].Time > finish) return null;
                        int jCount = values.Count;
                        if (values[jCount - 1].Time < start) return null;

                        int j1 = -1;
                        for (int j = 0; j < jCount; j++)
                        {
                            if (values[j].Time <= start) continue;
                            j1 = j;
                            break;
                        }
                        if (j1 == -1) return null;
                        int j2 = j1;
                        for (int j = j1 + 1; j < jCount; j++)
                        {
                            if (values[j].Time > finish) break;
                            j2 = j;
                        }

                        // копирование выделенного участка данных
                        GraphicValue[] tmp = new GraphicValue[j2 - j1 + 1];
                        int jPos = 0;
                        for (int j = j1; j <= j2; j++)
                        {
                            tmp[jPos] = values[j];
                            jPos++;
                        }

                        return tmp;
                    }
                }
                finally
                {
                    slim.ExitReadLock();
                }
            }

            return null;
        }