方法
GioApplicationrun
自:2.28
声明 [源]
int
g_application_run (
GApplication* application,
int argc,
char** argv
)
描述 [源]
运行应用程序。
此函数旨在从 main()
中运行,其返回值应从 main() 返回。尽管预期您将从 main() 传递 argc
、argv
参数到此函数,但如果 argv
不可用或不需要命令行处理,则可以传递 NULL
。请注意,在 Windows 上,argc
和 argv
被忽略,并内部调用 g_win32_get_command_line()
(以支持 Unicode 命令行参数)。
GApplication
将尝试解析命令行参数。您可以通过 向识别选项的列表添加命令行标志。之后,将发出
GApplication::handle-local-options
信号,应用程序可以从中检查其 GOptionEntrys
的值。
GApplication::handle-local-options
是处理如 --version
之类的选项的好地方,其中希望从本地进程立即回复(而无需与已运行的实例通信)。GApplication::handle-local-options
处理程序可以通过返回非负值来停止进一步处理,该值然后变为进程的退出状态。
接下来发生的事情取决于标志:如果指定了 G_APPLICATION_HANDLES_COMMAND_LINE
,则剩余的命令行参数将发送到主实例,主实例将发出一个 GApplication::command-line
信号。否则,剩余的命令行参数将被假定为文件列表。如果没有列出文件,则通过 GApplication::activate
信号激活应用程序。如果有一个或多个文件,并且指定了 G_APPLICATION_HANDLES_OPEN
,则通过 GApplication::open
信号打开文件。
如果您想对命令行进行更复杂的本地处理,那么您应该实现您自己的 GApplication
子类并覆盖 local_command_line()
。在这种情况下,您很可能希望从您的 local_command_line()
实现中返回 TRUE
来抑制默认处理。请参阅 [gapplication-example-cmdline2.c][https://gitlab.gnome.org/GNOME/glib/-/blob/HEAD/gio/tests/gapplication-example-cmdline2.c],以获取一个示例。
在完成上述操作后,如果应用程序的使用次数为零,则立即返回退出状态。如果使用次数非零,则将迭代默认主上下文,直到使用次数降至零,此时返回 0。
如果设置了 G_APPLICATION_IS_SERVICE
标志,则服务将在使用次数为零的情况下运行多达 10 秒,等待激活引起的消息到达。之后,如果使用次数降至零,则应用程序将立即退出,除非正在使用 g_application_set_inactivity_timeout()
。
此函数在尚未设置的情况下将程序名称(g_set_prgname())设置为 argv[0] 的基本名称。
与 g_main_loop_run() 非常相似,此函数将在应用程序运行期间获取主上下文。
自 2.40 以来,未明确标记为服务或启动程序的应用程序(即:既没有 G_APPLICATION_IS_SERVICE
也没有 G_APPLICATION_IS_LAUNCHER
被作为标志给出)将检查(从 local_command_line 的默认处理程序)命令行中是否给出了“—gapplication-service”。如果该标志存在,则正常的命令行处理将被中断,并设置 G_APPLICATION_IS_SERVICE
标志。这提供了一个“折衷”的解决方案,允许直接从命令行运行应用程序并以正常方式调用它(这可能对调试很有用),同时仍然允许应用程序以服务模式通过 D-Bus 激活。D-Bus 服务文件应使用“—gapplication-service”作为唯一的命令行参数调用可执行文件。此方法适合大多数图形应用程序使用,但不应该在需要精确控制通过命令行调用的进程何时退出以及退出状态的编辑器等应用程序中使用。
发布时间:2.28