Форум — Ответы ( К темам )
? | 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), которая при конкурирующих обращениях способна привести к непредсказуемым результатам. Кстати говорить, что что-то не подходит слишком не обдуманный шаг, и в настоящем реальном времени работают только АВМ и АЦВМ. |