Форум — Ответы     (  К темам )
 ?  Andrgol: Можно ли в Chart рисовать в режиме real time(спец. для Георгия) (28-04-2003 02:59:32)
Можно ли в Chart рисовать в режиме реального времени
Функция Series1->AddXY(...) — не подходит

Она не рисует в режиме реального времени
Пример
for(...){
... //какие то действия
Sleep(100); // временная задержка
....
Series1->AddXY(...);
}

В результате график будет рисоваться не от точки к точке а просто через некоторое время (определяемое Sleep() и кол-вом циклов for) покажет сразу весь
график.
Что делать ?
 Георгий (28-04-2003 18:44:17)
Давай определимся:
в главном потоке у тебя работает такой код:
"
Пример
for(...){
... //какие то действия
Sleep(100); // временная задержка
....
Series1->AddXY(...);
}
"
если это так, то ничего нет удивительного в том, что "Она не рисует в режиме реального времени" т.к. главный цикл обработки сообщений занят твоим циклом, но есть возможность обработать сообщения, в том числе и сообщение для tchart на перерисовку с помошью вызова application->processmesages() в цикле:
"
Пример
for(...){
... //какие то действия
Sleep(100); // временная задержка
....
Series1->AddXY(...);
<------------->application->processmesages();
}
"
в этом случае как бы обеспечивается "реальное время", но время работы функции processmesages() не является детерминированным — она может или сразу вернуться или несколько секунд (если пользователь окошко передвигает), минут и даже часов/дней (но это в случае подвисания) работать.
Выход есть — использовать таймер например с периодом в 100ms и таким обработчиком:
Series1->AddXY(...);
но есть минусы — приоритет сообщения от таймера в Windows самый маленький (может быть есть ещё меньше, но о таких сообщениях я не знаю) т.е. при высокой занятости системы он может или не приходить или приходить с задержками
Выход есть :-)
можно в паралельном потоке добавлять точки, но тут главное не нае*нуться на несогласованность данных (внутренних данных tchart и tseries), которая при конкурирующих обращениях способна привести к непредсказуемым результатам.

Кстати говорить, что что-то не подходит слишком не обдуманный шаг, и в настоящем реальном времени работают только АВМ и АЦВМ.