Управление несколькими экземплярами программы - проблема открытия нескольких файлов - PullRequest
1 голос
/ 06 февраля 2011

Это не должно быть необычной проблемой, но я ничего не могу найти об этом в Google или на другом поисковике.

Итак, я сделал приложение, используя C ++ и QtCreator.Я сделал новый тип MIME для файлов проекта приложения.Моя система (Ubuntu 10.10), когда я щелкаю правой кнопкой мыши по файлу и выбираю «Открыть с помощью« Приложения по умолчанию »», он запускается

Код:

путь по умолчанию для приложения / к // selected / file1

Итак, если вы выберете несколько файлов и выберете «Открыть с помощью« Приложения по умолчанию »», система вызовет

Код:

путь к приложению по умолчанию / к / выбранному / файлу1
путь к приложению по умолчанию / к / выбранному / файлу2
путь к приложению по умолчанию / к / выбранному / файлу3

Итакэто большая проблема для меня, потому что я обрабатываю параллельные процессы внутри программы, поэтому при запуске другого экземпляра программы появляется предупреждающее сообщение.Таким образом, каждый вызов приложения распознает остальные как запущенные в данный момент приложения, и поэтому он покажет сообщение.В итоге я получу 3 сообщения о том, что выполняется другой процесс программы --_-- 'Мое приложение обрабатывает несколько URL-адресов следующим образом:

Код:

myapp path/ к / выбранному / пути к файлу1 / к / пути к / выбранному / файлу2 / к / выбранному / файлу3

Как я могу заставить мой код обрабатывать все эти несколько экземпляров одновременно?Все, что я пробовал, терпит неудачу, потому что все, что я пробовал, требует проверки из первого вызванного экземпляра, который слишком медленный, и другие экземпляры приходят в приложение, и все вместе предупреждают о параллельных процессах одной и той же программы

Итак, Как я могу это исправить?это зависит от системы, или я могу что-то сделать с кодом?

1 Ответ

1 голос
/ 07 февраля 2011

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


РЕДАКТИРОВАТЬ:

Способ сделать так, чтобы ваш первый экземпляр приложения вел себя как сервер. Псевдо-алгоритм - это что-то вроде:

start();

try_to_contact_master_server_instance();
if(no_master())
{
    I_am_master();
    start_listening_server_that_wait_for_requests();
}
else
{
    send_request_to_master("open file path/to/the/selected/file1");
    send_request_to_master("open file path/to/the/selected/file2");
    send_request_to_master("open file path/to/the/selected/file3");
    die();
}

handle_incoming_requests();

Надеюсь, это понятнее? Скажите, если вам нужно больше точности ...

Для серверной части вы можете создать свою собственную или использовать некоторую программную шину, предоставляемую ОС, например, dbus или что-то еще, но это, конечно, делает ваше приложение зависимым.

my2c

...