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