Добрый день!
Вопрос синхронизации в ZETVIEW очень непростой, и в частности это касается компонента «График».
Первая проблема — это отображение нескольких графиков. Пока график один, то его можно отображать всякий раз когда на вход приходит новая порция данных. Например, график самописца, когда каждый новый результат измерения не выбрасывается, а добавляется в конец графика. Когда графиков несколько, то отображать на изменение каждого входного набора данных не разумно, так как это приводит к лишним операциям рисования. Например, когда мы работаем с массивами в режиме накопления данных, то первый пришедший массив будет нарисован целиком, а остальные без последней точки. Когда придёт второй массив первый будет перерисован заново и т.д. Или будут заметные «волнообразные» изменения графиков, когда мы массивы размер массивов не изменяется, а изменяются все данные целиком, например, при измерении спектров. Поэтому мы добавили в компонент «График» входной контакт логического типа «Снхронизация», на который подаём сигнал из компонента «Таймер», по сигналу с которого обновляются все графики одновременно при выборе свойства «xystate» любого параметра кроме «y(n)».
Отсюда вытекает ещё одна проблема — отображение большого количества данных. На текущий момент компонент «График», который использует Active-X компонент GridGL.ocx, может отображать массивы, содержащие до 600 тыс. точек благодаря некоторым допущениям и оптимизации. Поэтому ось Х в наших графиках подразумевает равномерное разбиение интервала на точки — будь то порядковые номера, или вещественные числа, или значения времени. Если в новых данных по оси Х равномерность не нарушается и шаг между точками остаётся постоянным, то компонент «График» не выполняет пересчёт и отображение новых графиков происходит быстрее. Но если новое значение нарушает закономерность, то выполняются все функции расчёта и рисования. А за увеличившееся время ожидания приходят новые данные.
При выборе в свойстве «xystate» варианта «y(x) — реально» полный перерасчёт происходит регулярно.
Поэтому мы в наших проектах ZETVIEW, работающих с большим количеством данных, используем синхронизацию расчётов и отображения с помощью компонента «Таймер».