在 Gtkmm 应用程序中,第一行是:
Glib::RefPtr<Gtk::Application> app = Gtk::Application::create(argc,argv,"org.gtkmm.examples.base");
我知道
org.gtkmm.examples.base
是一个应用程序ID。关于应用程序 ID 的一些问题:
根据Gio::Application Class Reference:
应用程序提供的核心功能之一是“会话”上下文中的流程唯一性。会话概念与平台相关,但大致对应于图形桌面登录。当您的应用程序再次启动时,其参数将通过平台通信传递给已经运行的程序。程序已经运行的实例称为主实例。
当我使用相同的应用程序标识符启动同一程序的两个实例时,第二个实例不会创建新窗口。相反,它向第一个发送信号,然后退出。如果我使用不同的应用程序标识符启动同一程序的两个实例,这两个实例将独立运行。
具体回答您的问题1和2,从上面看来,应用程序标识符标识了应用程序的主要实例。如果使用相同的应用程序标识符启动第二实例,则第二实例将向主实例发送消息,而不是创建新的主实例。这可用于实现某些网络浏览器中的那种功能,其中程序的第二次启动会在新选项卡而不是新窗口中显示网页。