2011-02-05 9 views
1

Это не должно быть необычной проблемой, но я ничего не могу найти об этом в google или на другой поисковой машине.Управление несколькими экземплярами программы - открыть проблему с несколькими файлами

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

Код:

default_application путь/к// выбранный/file1

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

Код:

default_application путь/к// выбранный/file1
default_application путь/к/в/выбран/file2
default_application путь/к// выбранный/file3

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

Код:

MyApp путь/к// selected/file1 path/to/the/selected/file2 path/to/the/selected/file3

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

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

ответ

1

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


EDIT:

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

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

+0

Я знаю этого друга. Но чтобы первый экземпляр мог сказать второй, что первый экземпляр был запущен, второй экземпляр уже запущен! –