【问题标题】:Control multiple program instances - open multiple files problem控制多个程序实例——打开多个文件问题
【发布时间】:2011-06-22 01:04:08
【问题描述】:

这应该不是一个不寻常的问题,但我在 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

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

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

【问题讨论】:

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


    【解决方案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

    【讨论】:

    • 我认识这个朋友。但是为了让第一个实例告诉第二个实例另一个实例已首先运行,第二个实例已经开始运行!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-02
    • 2011-04-06
    • 1970-01-01
    • 1970-01-01
    • 2016-11-18
    • 2017-05-12
    • 1970-01-01
    相关资源
    最近更新 更多