![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Глючит TChart [D7, Win2k]
aleks_z © (2006-05-11 12:52:00)Столкнулся с проблемой - добавляю в цикле (AddXY) 800 значений, они рисуются секунд 5 или даже больше, все программы при этом висят. Может кто сталкивался с таким или может кто подскажет, где собака зарыта?
Может поможет дополнительная информация: данные для добавления получаю по событию из драйвера (DeviceIoControl) в буфер каждые 200мс (для прорисовки точно знаю нужно не больше 16мс). При этом повесил обработчик события OnAfterDraw, в котором рисую на чарте - все рисуется нормально. И еще, когда кликаю мышкой где-нибудь на окне - тоже рисуется быстро. Пробовал вставлять Application.ProcessMessages - как мертвому припарка.
Сергей М. (2006-05-12 12:38:00) [1]
> сообщение отправляется (смотрел Spy), но обработчик не вызывается
Чем в этот момент занят осн.поток ?
DesWind (2006-05-12 11:13:00) [2]Я бы в дополнительном потоке данные закидывал в буфер, а потом из основного потока выгребал их оттуда и отрисовывал.
aleks_z (2006-05-12 11:02:00) [3]Пытаюсь сделать обращение к контролу в основном потоке, посылая свое сообщение из ожидающего потока. Через SendMessage и PostMessage не получается, сообщение отправляется (смотрел Spy), но обработчик не вызывается. Form.Perform работает, но эффект тот же, что был раньше (тормоза). Как-то можно урегулировать этот вопрос?
Сергей М. (2006-05-11 16:17:00) [4]
> Как TChart с многопоточностью, ладит?
Нет, не ладит.
Это визуальный VCL-контрол и обращения к нему (в первую очередь - модифицирующие канву) должны осуществляться в осн.потоке.
> Кстати, OnAfterDraw рисует в другом потоке
Весьма сомнительно
aleks_z (2006-05-11 16:06:00) [5]Если не понял, что прорисовывается быстро - то что рисую в OnAfterDraw, серия с данными тормозит.
Замерял все времена, которые могут на это повлиять, все нормально. Коментирую строку с добавлением в цикле - все быстро. Я вот думаю, может это из-за того, что я жду событие в отдельном потоке и из него же добавляю? Как TChart с многопоточностью, ладит? Кстати, OnAfterDraw рисует в другом потоке...
DesWind (2006-05-11 14:47:00) [6]
> При этом повесил обработчик события OnAfterDraw, в котором
> рисую на чарте - все рисуется нормально. И еще, когда кликаю
> мышкой где-нибудь на окне - тоже рисуется быстро. Пробовал
> вставлять Application.ProcessMessages - как мертвому припарка.
>
>
не понял.
А ты померь время различных этапов в твоей программе. Токо недавно накатал программу для просмотра данных TChart-ом, добавляю из таблицы несколько десятков тысяч точек, задержка незаметна.