Как построить график потоковых данных в C # - PullRequest
2 голосов
/ 21 июня 2009

Мне нужен график потоковых данных (9600 бод), которые поступают в 2-4-байтовых пакетах от последовательного порта. Пакеты должны быть обработаны перед графиком. В настоящее время я создаю событие для каждого завершенного пакета, что вызывает проблемы с отзывчивостью в графической форме.

Какое решение этой проблемы лучше всего:

  • Буферизовать данные и увеличить буферизованные данные в событии через определенные интервалы времени (т. Е. 500 миллисекунд)
  • Построить буфер и позволить объектному объекту опрашивать буферизованные данные / пустой буфер при опросе
  • Другое (?)

1 Ответ

5 голосов
/ 22 июня 2009

Я бы определенно ограничил частоту обновления. Для таких приложений обычно достаточно одного каждые 300 мс.

Исходя из этого, хорошей реализацией будет рабочий поток, который читает последовательный порт и добавляет его в буфер. Поток пользовательского интерфейса может использовать таймер для запроса данных и обновления отображения.

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

Еще одна хитрость - не использовать фиксированный таймер, а перезапустить таймер после завершения обновления. Таким образом, если обновление занимает значительное время, например из-за высокой загрузки системы ваши обновления замедляются, эффективно снижая нагрузку.

...