Привет!
Подскажите как правильно сделать отрисовку в TChart данных, которые приходят из другого потока.
Задача такая — есть главный поток и поток, который читает из последовательного порта. Данные в порт могут придти в произвольный момент, т.е. это поток данных с частотой от 1 до 200 Гц которые нужно отображать в TChart.
Сначала я просто рисовал из читающего потока, но при таком способе через некоторое время возникает ошибка приложения. Потом сделал с помощью PostMessage — шлю главной форме сообщение WM_USER, стало лучше в плане стабильности, но данные отображает некорректно. Подскажите, пожалуйста, способ без использования TThreads.
Здравствуйте, alx7235, Вы писали:
A>Привет! A>Подскажите как правильно сделать отрисовку в TChart данных, которые приходят из другого потока. A>Задача такая — есть главный поток и поток, который читает из последовательного порта. Данные в порт могут придти в произвольный момент, т.е. это поток данных с частотой от 1 до 200 Гц которые нужно отображать в TChart. A>Сначала я просто рисовал из читающего потока, но при таком способе через некоторое время возникает ошибка приложения. Потом сделал с помощью PostMessage — шлю главной форме сообщение WM_USER, стало лучше в плане стабильности, но данные отображает некорректно. Подскажите, пожалуйста, способ без использования TThreads.
Вариант с PostMessage вполне подходит для такого потока данных. Возможно, что-то не в порядке с реализацией. Что значит — данные отображает некорректно?
Re[2]: Синхронизация отрисовки данных из COM-порта
Здравствуйте, alx7235, Вы писали:
A>Привет! A>Подскажите как правильно сделать отрисовку в TChart данных, которые приходят из другого потока. A>Задача такая — есть главный поток и поток, который читает из последовательного порта. Данные в порт могут придти в произвольный момент, т.е. это поток данных с частотой от 1 до 200 Гц которые нужно отображать в TChart. A>Сначала я просто рисовал из читающего потока, но при таком способе через некоторое время возникает ошибка приложения. Потом сделал с помощью PostMessage — шлю главной форме сообщение WM_USER, стало лучше в плане стабильности, но данные отображает некорректно. Подскажите, пожалуйста, способ без использования TThreads.
PostMessage не нужно.
Нужно поставить мютекс и все потоки в очередь!
конструкция в потоке гдето такая
if WaitForSingleObject(Mutex, INFINITE) = WAIT_OBJECT_0 then// Захват мютексаbegin
Synchronize(ThreadSendData);//Сообщаем end;
Re[2]: Синхронизация отрисовки данных из COM-порта
Здравствуйте, FantasyDD, Вы писали:
FDD>Здравствуйте, alx7235, Вы писали:
A>>Привет! A>>Подскажите как правильно сделать отрисовку в TChart данных, которые приходят из другого потока. A>>Задача такая — есть главный поток и поток, который читает из последовательного порта. Данные в порт могут придти в произвольный момент, т.е. это поток данных с частотой от 1 до 200 Гц которые нужно отображать в TChart. A>>Сначала я просто рисовал из читающего потока, но при таком способе через некоторое время возникает ошибка приложения. Потом сделал с помощью PostMessage — шлю главной форме сообщение WM_USER, стало лучше в плане стабильности, но данные отображает некорректно. Подскажите, пожалуйста, способ без использования TThreads.
FDD>PostMessage не нужно. FDD>Нужно поставить мютекс и все потоки в очередь!
FDD>конструкция в потоке гдето такая
FDD>
FDD> if WaitForSingleObject(Mutex, INFINITE) = WAIT_OBJECT_0 then// Захват мютекса
FDD> begin
FDD> Synchronize(ThreadSendData);//Сообщаем
FDD> end;
FDD>