Синхронизация отрисовки данных из COM-порта
От: alx7235  
Дата: 02.06.11 18:15
Оценка:
Привет!
Подскажите как правильно сделать отрисовку в TChart данных, которые приходят из другого потока.
Задача такая — есть главный поток и поток, который читает из последовательного порта. Данные в порт могут придти в произвольный момент, т.е. это поток данных с частотой от 1 до 200 Гц которые нужно отображать в TChart.
Сначала я просто рисовал из читающего потока, но при таком способе через некоторое время возникает ошибка приложения. Потом сделал с помощью PostMessage — шлю главной форме сообщение WM_USER, стало лучше в плане стабильности, но данные отображает некорректно. Подскажите, пожалуйста, способ без использования TThreads.
Re: Синхронизация отрисовки данных из COM-порта
От: MBo  
Дата: 03.06.11 02:45
Оценка:
Здравствуйте, alx7235, Вы писали:

A>Привет!

A>Подскажите как правильно сделать отрисовку в TChart данных, которые приходят из другого потока.
A>Задача такая — есть главный поток и поток, который читает из последовательного порта. Данные в порт могут придти в произвольный момент, т.е. это поток данных с частотой от 1 до 200 Гц которые нужно отображать в TChart.
A>Сначала я просто рисовал из читающего потока, но при таком способе через некоторое время возникает ошибка приложения. Потом сделал с помощью PostMessage — шлю главной форме сообщение WM_USER, стало лучше в плане стабильности, но данные отображает некорректно. Подскажите, пожалуйста, способ без использования TThreads.

Вариант с PostMessage вполне подходит для такого потока данных. Возможно, что-то не в порядке с реализацией. Что значит — данные отображает некорректно?
Re[2]: Синхронизация отрисовки данных из COM-порта
От: о_О
Дата: 03.06.11 03:09
Оценка:
Здравствуйте, MBo, Вы писали:

http://rsdn.ru/forum/message/4075386.aspx
Автор: alx7235
Дата: 12.12.10
Re: Синхронизация отрисовки данных из COM-порта
От: FantasyDD  
Дата: 13.06.11 05:46
Оценка:
Здравствуйте, 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  
Дата: 13.06.11 05:47
Оценка:
Здравствуйте, 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>


ОЙ и в конце

ReleaseMutex(hMutex); // Отпускаем мютекс
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.