控制多个程序实例 - 打开多个文件问题

时间:2011-02-05 21:41:05

标签: c++ qt-creator ubuntu-10.10 multiple-files

这不应该是一个不寻常的问题,但我在google或其他搜索机器上找不到任何关于它的信息。

所以,我使用C ++和QtCreator创建了一个应用程序。我为应用程序的项目文件制作了一个新的mime类型。 我的系统(ubuntu 10.10),当我右键单击一个文件并选择“打开'默认应用程序'”时,它运行

代码:

default_application path / to / the / selected / file1

因此,如果您选择多个文件并选择“打开'默认应用程序'”,系统将调用

代码:

default_application path / to / the / selected / file1
default_application path / to / the / selected / file2
default_application path / to / the / selected / file3

所以,这对我来说是个大问题,因为我从程序内部处理并发进程,所以当程序的另一个实例运行时,会出现一条警告消息。因此,每个应用程序的调用都会将其他应用程序识别为当前正在运行的应用程序,因此它将显示该消息。我最终会得到3条消息说该程序的另一个进程正在运行--_--' 我的应用程序以这种方式处理多个URL:

代码:

myapp path / to / the / selected / file1 path / to / the / selected / file2 path / to / the / selected / file3

如何让我的代码同时处理所有这些多个实例?我尝试过的所有内容都失败了,因为我尝试的所有内容都需要从第一个调用实例进行检查,这个调用太慢而其他实例都来自应用程序并且所有这些实例都警告同一程序的并发进程

那么,我该如何解决这个问题呢?是系统依赖,还是我可以用代码做点什么?

1 个答案:

答案 0 :(得分: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