Qt portable IPC: только QSharedMemory? - PullRequest
4 голосов
/ 11 ноября 2009

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

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

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

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

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

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

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

Ответы [ 3 ]

4 голосов
/ 11 ноября 2009

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

2 голосов
/ 03 мая 2013

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

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

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

QTcpServer с использованием нескольких потоков

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

0 голосов
/ 03 июня 2017

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

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

...