Вопрос

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

Что является лучшим решением этой проблемы:

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

Решение

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top