QThread и QTcpServer это хороший выбор?

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

Я использую Qt для разработки графического интерфейса для управления 3D-движком.
Qt и 3D-движок взаимодействуют друг с другом, используя QTcpserver.
Я могу отправить команду 3D-движку, например, «Переместить объект» или «Перечислить объекты в сцене», и механизм ответит.

В настоящее время существует 2 проблемы:
1) Когда сервер отвечает, я не могу знать, является ли это ответом от функции «перемещение» или для функции «список». Я анализирую ответ для запуска события в графическом интерфейсе, но это не правильное решение.
2) Перед отправкой команды я вызываю функцию waitForReadyRead, которая блокирует основной поток.
Вот почему я публикую здесь.

Я думал о решении: поток, который содержит список команд и указатель на функцию для вызова следующей. Когда я нажимаю кнопку пользовательского интерфейса, она отправляет команду в список с правильным указателем на функцию, и поток пытается очистить команду отправки списка на сервер.

Но я действительно не знаю, является ли это хорошим способом решить мою проблему.
Я не знаю много о QTcpServer и QThread, я прочитал много статей, где они используются вместе, чтобы обрабатывать множественные клиентские соединения, но это мне не помогло.

Я не размещал здесь код, потому что не думаю, что мой вопрос «связан с кодом», но я был бы рад сделать это, если вы спросите меня.

Спасибо, что указали мне правильное направление.

0

Решение

Операции над QTcpSocket спроектированы как асинхронные. Не пытайтесь использовать его как синхронные объекты — это не то, как этот класс был разработан. Конечно, вы можете создать отдельный поток для выполнения там обработки, но простая отправка команд через сокет не гарантирует издержки потоков.

http://qt-project.org/doc/qt-5/qabstractsocket.html

Посмотрите на сигналы, которые испускаются, включая readyRead () из QIODevice. Создайте слот, который будет обрабатывать ваши данные и подключать его к этому сигналу. Вы должны также обработать другие случаи, включая сигналы обработки ошибок и иметь дело с подключенными / отключенными состояниями.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]