Бесконечный цикл в главном потоке
От: alx7235  
Дата: 14.12.10 15:12
Оценка:
Привет! У меня есть дополнительный поток в программе, в котором происходит обработка данных. Затем нужно эти данные отображать в TChart в главном потоке. Вопрос в следующем как после создания формы запустить бесконечный цикл — в нем хочу отрисовывать данные полученные из дочернего потока, чтобы ничего не повисло и не было ошибок.
Re: Бесконечный цикл в главном потоке
От: Hruks Россия www.hruks.com
Дата: 15.12.10 00:12
Оценка:
Не нужно бесконечных циклов в основном приложении.
Взаимодействие с потоком должно быть событийным — поток должен соощать основному потоку, что у него есть новые данные. Если данные простые, то прямо в этом сообщении и передавать их.
Почитайте про взаимодействие потоков.
Re: Бесконечный цикл в главном потоке
От: strannik747  
Дата: 15.12.10 06:20
Оценка: -1 :)
Здравствуйте, alx7235, Вы писали:

A>Привет! У меня есть дополнительный поток в программе, в котором происходит обработка данных. Затем нужно эти данные отображать в TChart в главном потоке. Вопрос в следующем как после создания формы запустить бесконечный цикл — в нем хочу отрисовывать данные полученные из дочернего потока, чтобы ничего не повисло и не было ошибок.


Чтобы приложение не "подвисало", пока идет длительный расчет и т.п., надо юзать в цикле Application.ProcessMessages;
Re: Бесконечный цикл в главном потоке
От: Utruk  
Дата: 24.12.10 08:28
Оценка:
Здравствуйте, alx7235, Вы писали:
A>Привет! У меня есть дополнительный поток в программе, в котором происходит обработка данных. Затем нужно эти данные отображать в TChart в главном потоке. Вопрос в следующем как после создания формы запустить бесконечный цикл — в нем хочу отрисовывать данные полученные из дочернего потока, чтобы ничего не повисло и не было ошибок.

Не надо запускать бесконечных циклов.

Между основным потоком и потоком производящим вычисления разделяются те самые данные. Защитить их от одновнеменного доступа можно через критическую секцию. Дальше собственно варианты:

1. Поток вычисления выставляет TEvent что результаты готовы к употреблению. Главный поток ждет TEvent, как его выставили, так он отображает новую порцию данных, и сбрасывает TEvent обратно. Поток вычисления видит что TEvent сбросили, и продолждает вычисления.

2. Главный поток использует таймер и через определенные интервалы времени проверяет есть-ли новые данные. Если они есть, то данные отображаются.

3. Вычислительный поток по готовности вызывает обработчик события который находится в главном потоке. Обработчик события через Synchronize рисует чего надо.
Re[2]: Бесконечный цикл в главном потоке
От: dkotov  
Дата: 24.12.10 11:27
Оценка:
Application.ProcessMessages — это пережиток со времен "Windows 3.11"
На дворе 21 век
... << RSDN@Home 1.2.0 alpha 4 rev. 1481>>
Re[3]: Бесконечный цикл в главном потоке
От: DarkMaster Украина http://www.bdslib.at.ua
Дата: 24.12.10 11:37
Оценка:
Здравствуйте, dkotov, Вы писали:

D>Application.ProcessMessages — это пережиток со времен "Windows 3.11"

D> На дворе 21 век

Ага, как и функция WinMain()...
WBR, Dmitry Beloshistov AKA [-=BDS=-]
Re[4]: Бесконечный цикл в главном потоке
От: dkotov  
Дата: 24.12.10 11:49
Оценка:
Вы о чем?
... << RSDN@Home 1.2.0 alpha 4 rev. 1481>>
Re: Бесконечный цикл в главном потоке
От: a-b-c  
Дата: 24.12.10 15:17
Оценка:
Здравствуйте, alx7235, Вы писали:

A>Привет! У меня есть дополнительный поток в программе, в котором происходит обработка данных. Затем нужно эти данные отображать в TChart в главном потоке. Вопрос в следующем как после создания формы запустить бесконечный цикл — в нем хочу отрисовывать данные полученные из дочернего потока, чтобы ничего не повисло и не было ошибок.


Советую переходить в мультипотоковый режим, в связи с чем советую довольно продвинутую библиотеку OmniThreadLibrary (http://otl.17slon.com/)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.