Qt portable IPC: только QSharedMemory?

Я ищу предложения по выбору портативного способа достижения локального IPC надежным способом, так как я новичок в C++ и хотел бы избежать распространенных ошибок, связанных с совместным использованием памяти и блокировок; поэтому я думал о стиле передачи сообщений ipc.

В любом случае я планировал использовать qt по другим причинам, поэтому я взглянул на опции Qt ipc.

если я правильно понимаю, qt не предлагает полностью переносимую функцию ipc для передачи сообщений. он может использовать шину D-Bus, но использование его на Windows будет проблемой. другие способы ограничены встроенными платформами Linux (и я хотел бы перенести эту штуку на AIX).

Я не смог найти "сигнал и слоты" или реализацию стиля передачи сообщений, которая использует QSharedMemory и QSystemSemaphores

Таким образом: я ограничен, чтобы реализовать функцию в QSM/QSS? какие еще варианты я мог бы изучить? посикс трубы? буферы протокола? повысить очереди и сообщения?

Я подумываю выпустить код под лицензией в стиле LGPL/GPL, исключает ли это использование буферов протокола или ускорение библиотек?

пожалуйста, опять же, интерфейс должен быть простым и защищенным от новичков (в противном случае я определенно испорчу вещи:)), также как и сериализация / десериализация типов, обработка ошибок и удаление ресурсов.

3 ответа

Решение

Взгляните на Boost.Interprocess, который предоставляет множество функций IPC. Я использовал interprocess message_queue, который обеспечивает довольно чистый и простой способ сделать то, что, я думаю, вы хотите сделать.

Вы также можете использовать QLocalSocket и QlocalServer для IPC. Эти два класса действительно просты в использовании и могут быть реализованы почти так же, как если бы вы использовали клиент-сервер сокета Qt TCP.

Вы можете взглянуть на некоторые из этих видео на YouTube:

QTCPServer - базовое приложение сервера TCP

QTcpServer использует несколько потоков

(Практически те же принципы будут применяться для "локального" сервера / клиента вместо "TCP")

Как и в Qt 5.9, существует модуль, который в настоящее время находится под предварительным именем технологии QtRemoteObjects, который предоставляет собственный Qt IPC для QObjects, его простой в использовании и может использоваться для обмена сигналами / слотами, а также моделями между двумя процессами.

Это хорошо работает для Linux, Windows и Android

Другие вопросы по тегам