Russian Qt Forum

Qt => Общие вопросы => Тема начата: Racheengel от Май 22, 2017, 10:57



Название: Список всех инстанций приложения
Отправлено: Racheengel от Май 22, 2017, 10:57
Всем привет,
казалось бы простая вещь, но или я туплю, или в Qt такого нету...

Надо просто получить список всех запущенных инстанций текущего приложения.
Если ли мультиплатформенное решение или под каждую ось придется свой велик ваять?


Название: Re: Список всех инстанций приложения
Отправлено: Пантер от Май 22, 2017, 11:11
Нет такого. А как ты задетектишь? Запущенное из разных каталогов это одно и то же? Разные сборки одного приложения это одно и то же?


Название: Re: Список всех инстанций приложения
Отправлено: Racheengel от Май 22, 2017, 11:20
Запущенное из разных каталогов это одно и то же? Разные сборки одного приложения это одно и то же?

Тут, конечно, могут быть варианты - но для простоты пусть хотя бы будет "одна инстанция = один и тот же путь запуска".
Предполагается, что приложение может быть проинсталлировано у пользователя только в единственном варианте.


Название: Re: Список всех инстанций приложения
Отправлено: gil9red от Май 22, 2017, 11:26
Мне в голову лезет сложное решение с http-сервером, к которому приложения при запуске присылают команду с их полным путем (включая exe'шник), а сервер время от времени проверяет среди процессов их :)


Название: Re: Список всех инстанций приложения
Отправлено: Racheengel от Май 22, 2017, 11:36
Мне в голову лезет сложное решение с http-сервером, к которому приложения при запуске присылают команду с их полным путем (включая exe'шник), а сервер время от времени проверяет среди процессов их :)

https://static.seekingalpha.com/uploads/2016/2/41873736_14561743352441_rId5.png


Название: Re: Список всех инстанций приложения
Отправлено: Dimka Novikov от Май 22, 2017, 11:38
Посмотрите в сторону qtsingleapplication.


Название: Re: Список всех инстанций приложения
Отправлено: Пантер от Май 22, 2017, 11:40
Придется самому реализовывать. Пробежать по процессам и сравнить пути.


Название: Re: Список всех инстанций приложения
Отправлено: Пантер от Май 22, 2017, 11:41
Посмотрите в сторону qtsingleapplication.
У ТС задача не один инстанс создать, а узнать количество инстансов.


Название: Re: Список всех инстанций приложения
Отправлено: Dimka Novikov от Май 22, 2017, 11:44
У ТС задача не один инстанс создать, а узнать количество инстансов.

Я имел в виду сделать аналогично, но только не запрещать запуск, а делать подсчёт запущеных копий.


Название: Re: Список всех инстанций приложения
Отправлено: Пантер от Май 22, 2017, 11:47
На сколько я помню, там через пайп работает, то есть, только 2 экземпляра могут общаться друг с другом.


Название: Re: Список всех инстанций приложения
Отправлено: Racheengel от Май 22, 2017, 11:49
Ближайший аналог желаемого - MS-Office или Inkscape.
Открытие файла создает новую инстанцию (независимую от первой).
Но каждая инстанция имеет менюшку Windows, где перечислены все остальные (и можно переключаться между ними).


Название: Re: Список всех инстанций приложения
Отправлено: Пантер от Май 22, 2017, 11:56
Как вариант - каждый инстанс создает в определенном каталоге файл, имя которого - пид процесса. При закрытии файл удаляется. Чтобы построить менюшку тебе надо получить файлы из каталога. но нужно проверить существует ли такой процесс и удалить файл, если не существует.


Название: Re: Список всех инстанций приложения
Отправлено: Dimka Novikov от Май 22, 2017, 12:00
Кажется можно больше двух. https://github.com/itay-grudev/SingleApplication


Название: Re: Список всех инстанций приложения
Отправлено: Igors от Май 22, 2017, 13:42
Если ли мультиплатформенное решение или под каждую ось придется свой велик ваять?
Через QSharedMemory нормально получается. Ключ - проще всего полный путь исполняемого файла


Название: Re: Список всех инстанций приложения
Отправлено: Old от Май 22, 2017, 14:20
UDP запрос локалхосту, все другие инстанции отвечают на него.


Название: Re: Список всех инстанций приложения
Отправлено: Racheengel от Май 22, 2017, 14:22
Через QSharedMemory нормально получается. Ключ - проще всего полный путь исполняемого файла

По идее каждый раз, когда потребуется построить список инстанций, придется проверять, а жива ли еще каждая копия (мало ли, упадет одна инстанция - а другие про это не в курсе).


Название: Re: Список всех инстанций приложения
Отправлено: Racheengel от Май 22, 2017, 16:11
С QSharedMemory, кажется, нормально работает (по крайней мере в винде).
Игорь, спасибо за совет)
Правда, я храню PID, а не пути - шареная память-то (теоретически) должна быть маленькая...