Как использовать ASIO вместе с QT4? - PullRequest
0 голосов
/ 30 марта 2020

Я написал код на C ++ 11, используя asio для отправки / получения пакетов из сети. Для работы с asio необходимо вызвать asio::io_service::run(), и основной поток будет ожидать этой функции. Теперь в одном из приложений мне нужно разработать Gui, для которого мне нужно использовать Qt 4.8. Но для приложения Qt Gui основной поток должен ждать в QApplication::exec(). Хотя Qt имеет свои собственные библиотеки для отправки / получения данных из сети, я хотел бы использовать код с asio. Как я могу использовать asio вместе с Qt?

1 Ответ

1 голос
/ 31 марта 2020

Не видя ваш код .. универсальный обобщенный c подход:

  1. Вызов io_context::run() в новой теме. Все обработчики asyn c будут выполняться в этом потоке.
  2. Используйте mutex, чтобы обеспечить безопасное распределение модели данных между ASIO и GUI. Постоянно блокируйте мьютекс каждый раз, когда данные считываются или обновляются.
  3. Используйте сигналы Qt и слоты и / или condition_variable для подачи сигнала GUI от ASIO обработчики завершения всякий раз, когда пользовательский интерфейс должен быть обновлен. Не прикасайтесь к GUI непосредственно из кода ASIO, поскольку только поток пользовательского интерфейса может обновлять пользовательский интерфейс.
...