Название: [Решено] Обмен данными между независимыми Отправлено: Inhibitor от Январь 28, 2020, 21:13 Товарищи архитекторы ПО, нужен ваш совет.
Есть два независмых приложения. Независмость приложений полная: то есть это разные программы, у которых нет общих ресурсов и которые могут быть запущены в разное время в произвольном порядке. Допустим программа №1 владеет владеет некой именованой сущностью к которой привязан уникальный ID, который необходим для программы №2 для формирования данных. Пусть программа 2 знает имя сущности (доустим это констанстная сущность), так вот можно ли каким-либо способом по имени сущности вытянуть ID? Первое решение которое пришло в голову простое, но корявое. Программа 1 при запуске формирует файл в конкретной директории (путь до файла и имя файла это и есть та самая именованая сущность). В этот файл программа пишет уникальный ID. После завершения работы программа 1 удаляет файл. Программа 2 знает и путь и имя файла. После старта программа 2 проверяет наличие файла и в случае его существования вычитывает ID и начинает работу, в противном случае программа 2 ничего не делает. Возможно ли нечто подобное сделать, но без привязке к файловой структуре? Спасибо! Название: Re: Обмен данными между независимыми приложениями Отправлено: _Bers от Январь 28, 2020, 21:18 Возможно ли нечто подобное сделать, но без привязке к файловой структуре? реестр windows, например. или shared memory Название: Re: Обмен данными между независимыми приложениями Отправлено: Igors от Январь 29, 2020, 08:27 ..и которые могут быть запущены в разное время в произвольном порядке. Это момент принципиальный. Ситуация: "приложение 1" создает задание которое выполняется "приложением 2" напр завтра, или неделю спустя. Т.е. только задание важно, запущено "приложение 1" или как - не имеет значения. Тогда только файл(ы), без привязки не обойтись, но можно хранить путь в системе. Если же предполагается что оба приложения запущены - возможностей больше. Лично я делаю через shared память и проблем не имею. Когда-то один знаток советовал "pipe" (трубы, что ли) но с чем их едят - так и не знаю Название: Re: Обмен данными между независимыми приложениями Отправлено: qate от Январь 29, 2020, 09:19 Программа 1 при запуске формирует файл в конкретной директории ... После завершения работы программа 1 удаляет файл. Если программа 1 удалила файл, то как программа 2 его откроет или я не понял смысла обмена ? Название: Re: Обмен данными между независимыми приложениями Отправлено: Inhibitor от Январь 29, 2020, 18:28 Таки QSharedMemory ;D
Однако вот какой вопрос возник: программа 1 написана на Qt, программа 2 на чистом WinAPI. Вопрос на счет ключа. Программа 1 создает шару через конструктор Код: QSharedMemory(const QString &key, QObject *parent = nullptr) Однако у нас WinAPI и он ищет шару через функцию Код: OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, szName) Код: nativeKey() Код: qipc_sharedmemory_QSharedMemoryExampleff77196351dd7c1c8f79461ad32f21726fe31f5b Собственно вопрос (сам искал в сети и ничего путного пока не нашел): есть ли возможность в WinAPI обойтись без нативного ключа? Или может в WinAPI есть функция генерации ключа-говнямбы по заданому тексту? Если программа 1 удалила файл, то как программа 2 его откроет или я не понял смысла обмена ? Программа номер 2 может быть запущена в момент работы программы 1. Только тогда и произойдет вычитка ID, после чего программа 2 заработает в полную силу. В остальных случаях программа 2 лососнет тунца. Название: Re: Обмен данными между независимыми приложениями Отправлено: qate от Январь 30, 2020, 09:24 Таки Udp/Tcp сокеты
Название: Re: Обмен данными между независимыми приложениями Отправлено: Igors от Январь 30, 2020, 11:49 Собственно вопрос (сам искал в сети и ничего путного пока не нашел): есть ли возможность в WinAPI обойтись без нативного ключа? Или может в WinAPI есть функция генерации ключа-говнямбы по заданому тексту? 1) Никто не мешает использовать нативное API и в приложении 1, ну будет чуть менее удобно.2) Напечатать "полный" ключ в приложении 1 и вбить эту константу в приложение 2. (Исходное) имя ключа лучше связать с именем приложения. Если оба приложения должны быть в одной папке, то лучше использовать полный путь как имя. Иначе (если создатель приложение 1 может находиться где угодно), не помешает вписать полный путь а сам блок. Когда получите блок, не забудьте его "залочить" перед чтением/записью. Синхронизация - через системный семафор. Название: Re: Обмен данными между независимыми приложениями Отправлено: Fregloin от Март 19, 2020, 15:32 Registry (+ File) если Windows.
Таким образом у вас все в одном месте будет сосредоточено. Я так понял приложение 1 и 2 могут быть запущены в разное время и не пересекаться? Если так, то пишем/читаем в реестр по заранее оговоренным ключам и это нормальная практика. Можно писать так же в файл, если объемы большие. shared memory - ну такое, отъедать память, тут надо подумать насколько интенсивен обмен + перезагрузка и все, данные потеряны |