2011-02-05 54 views
1

这应该不是一个不寻常的问题,但我在谷歌或其他搜索机器上找不到任何关于它的任何信息。控制多个程序实例 - 打开多个文件问题

所以,我用C++和QtCreator做了一个应用程序。我为应用程序的项目文件创建了一个新的MIME类型。 我的系统(Ubuntu的10.10),当我右击一个文件,我选择“打开方式‘默认应用程序’的”运行

代码:

default_application路径/到/的/选择/文件1

因此,如果您选择多个文件,选择“打开方式‘默认应用程序’”系统会调用

代码:

default_application路径/到/的/选择/文件1
default_application路径/到/的/选择/文件2
default_application路径/到/的/选择/文件3

所以,这是一个大问题对我来说,因为我在程序内部处理并发进程,所以当另一个程序实例运行时,会出现一条警告消息。因此,每个应用程序的调用都会将其他人识别为当前正在运行的应用程序,并显示该消息。我会拥有3个消息说,该计划的另一个进程正在运行--_--” 我的应用程序处理多个网址是这样的:

代码:

MYAPP路径/到/的/ selected/file1 path/to/the/selected/file2 path/to/the/selected/file3

我该如何让我的代码同时处理所有这些多个实例?我用尽了一切失败,因为我什么都试过,需要从一审检查调用,这太慢等情况来应用和所有一起

那么,如何警示大约同一程序的并发进程我能解决这个问题吗?是系统依赖的,还是我可以用代码做些事情?

回答

1

的方法是使你的应用程序认识到,已经有一个实例运行,使新的实例只是期待第一个实例的请求垂死:)


编辑前:

的这样做的方法是让您的第一个应用程序实例像服务器一样运行。伪算法是这样的:

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

我认识这位朋友。但为了让第一个实例告诉第二个实例已经第一次运行,第二个实例已经开始运行了! – 2011-02-08 18:36:36