Сериализация сигналов / объектов QObject слота с использованием общей памяти

У меня есть два Qt приложения, совместно использующих сегмент памяти.

введите описание изображения здесь

Я хотел бы иметь возможность излучать сигнал из приложения 2 и запускать слот из приложения 1. Во-первых, мне нужно использовать QObject::connect(), чтобы связать сигнал App2 со слотом App1.

Есть ли хороший способ соединить два разных Qt механизма сигналов / слотов процессов? Я наткнулся на библиотеку qt-remote-signal для отправки удаленных сигналов. , который использует QDataStream для сериализации объекта. QSharedMemory использует тот же класс.

Или мне забыть о подключении чего-либо и просто имитировать поведение сигнала / слота?

  1. Запись в сегмент памяти из App2
  2. Считывайте сегмент всякий раз, когда он изменяется с App1 (как узнать, когда он обновляется?)
  3. Отправьте собственный сигнал из приложения 1
  4. Запустить слот из приложения 1

Звучит реалистично? Я новичок в общей памяти.


person Grégoire Borel    schedule 11.07.2017    source источник


Ответы (1)


Насколько я знаю, вы не можете подключить Signal / Slot между процессами. Также вы не можете знать «естественно», изменил ли другой процесс QSharedMemory.

Я думаю, вам придется смоделировать это, как вы сказали.

  1. Запись в сегмент памяти из App2
  2. Приложение 1 может периодически проверять сегмент, чтобы быть в курсе изменений из приложения 2. Как только изменение сделано, вы напрямую запускаете слот (вам действительно не нужен сигнал)

Если вам нужен мгновенный ответ (не делая слишком маленьким время проверки приложения 1) от App1, вы можете заставить их общаться с помощью QLocalSocket / Server или D-Bus, но в этом случае вы можете пойти ва-банк и управлять всеми коммуникациями, делая ненужный QSharedMemory.

person Sommerwild    schedule 12.07.2017
comment
Звучит как хорошее резюме того, что я нашел. Я буду копать протокол D-Bus. - person Grégoire Borel; 12.07.2017