Привет! У меня есть дополнительный поток в программе, в котором происходит обработка данных. Затем нужно эти данные отображать в TChart в главном потоке. Вопрос в следующем как после создания формы запустить бесконечный цикл — в нем хочу отрисовывать данные полученные из дочернего потока, чтобы ничего не повисло и не было ошибок.
Не нужно бесконечных циклов в основном приложении.
Взаимодействие с потоком должно быть событийным — поток должен соощать основному потоку, что у него есть новые данные. Если данные простые, то прямо в этом сообщении и передавать их.
Почитайте про взаимодействие потоков.
Здравствуйте, alx7235, Вы писали:
A>Привет! У меня есть дополнительный поток в программе, в котором происходит обработка данных. Затем нужно эти данные отображать в TChart в главном потоке. Вопрос в следующем как после создания формы запустить бесконечный цикл — в нем хочу отрисовывать данные полученные из дочернего потока, чтобы ничего не повисло и не было ошибок.
Чтобы приложение не "подвисало", пока идет длительный расчет и т.п., надо юзать в цикле Application.ProcessMessages;
Здравствуйте, alx7235, Вы писали: A>Привет! У меня есть дополнительный поток в программе, в котором происходит обработка данных. Затем нужно эти данные отображать в TChart в главном потоке. Вопрос в следующем как после создания формы запустить бесконечный цикл — в нем хочу отрисовывать данные полученные из дочернего потока, чтобы ничего не повисло и не было ошибок.
Не надо запускать бесконечных циклов.
Между основным потоком и потоком производящим вычисления разделяются те самые данные. Защитить их от одновнеменного доступа можно через критическую секцию. Дальше собственно варианты:
1. Поток вычисления выставляет TEvent что результаты готовы к употреблению. Главный поток ждет TEvent, как его выставили, так он отображает новую порцию данных, и сбрасывает TEvent обратно. Поток вычисления видит что TEvent сбросили, и продолждает вычисления.
2. Главный поток использует таймер и через определенные интервалы времени проверяет есть-ли новые данные. Если они есть, то данные отображаются.
3. Вычислительный поток по готовности вызывает обработчик события который находится в главном потоке. Обработчик события через Synchronize рисует чего надо.
Здравствуйте, alx7235, Вы писали:
A>Привет! У меня есть дополнительный поток в программе, в котором происходит обработка данных. Затем нужно эти данные отображать в TChart в главном потоке. Вопрос в следующем как после создания формы запустить бесконечный цикл — в нем хочу отрисовывать данные полученные из дочернего потока, чтобы ничего не повисло и не было ошибок.
Советую переходить в мультипотоковый режим, в связи с чем советую довольно продвинутую библиотеку OmniThreadLibrary (http://otl.17slon.com/)