@pixik

Как реализовать архитектуру многопоточного приложения для отрисовки графика?

Доброго времени, уважаемые разработчики!
Наткнулся на проблему и что-то мне подсказывает, что здесь должен быть некоторый шаблон, потому что проблема довольно типичная.

Суть:
Есть источник данных, который генерит поток со скоростью 5 Гбит/c (USB 3.0).
Проект пишется на С++ с использованием STL, QWT, QT библиотек.
Нужно обрабатывать этот поток в приложении определенным образом (т.е. выполнение некоторой не сильно грузящей математики) или писать на диск поток в виде бинарного файла.

Опыта решения подобных задач у меня нет, по этому решал, как представлял себе.
После недолгих размышлений, я решил сделать так:
Есть 3 потока и расшаренная неблокируемая очередь
  1. Поток, принимающий данные с USB и складывающий данные в очередь
  2. Поток, который в бесконечном цыкле просматривает очередь на наличие объектов. Если очередь имеет объекты,
    то поток дастаёт их из очереди и отправляет на дальнейшую обработку (либо пишет в файл, либо как то обрабатывает и выводит на график)
  3. Поток GUI, в котором рисуется графика и обрабатываются пользовательское взаимодействие


Подскажите пожалуйста, существуют ли типовые приёмы решения подобной задачи? Чем моё решение плохое? Если посоветуете литературу по данному направлению, буду премного благодарен=)
Спасибо всем за участие!
  • Вопрос задан
  • 601 просмотр
Пригласить эксперта
Ответы на вопрос 2
@vilgeforce
Раздолбай и программист
Ваше решение сходу плохо только тем, что второй поток данные "выводит на график". Дергать гуй из побочного потока - плохая идея, будут странные и плохоуловимые баги с большими шансами. А так все ок, на мой взгляд.
Ответ написан
@DancingOnWater
Момент номер 1. Qt требует, что гуи жил только в главном потоке. И если математика простая, а скорость по USB не критичная, то пусть математика лежит в том же потоке. что и чтение с USB.

Момент номер 2. Бесконечно крутящийся цикл это последняя мера. В Qt у вас есть сигналы, вот их и пользуйте.
USb принимает данные и толкает сигнал. его подхватывает математика и после обработки толкает сигнал. Его принимает GUI и отображает данные.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы