【发布时间】:2013-09-28 22:08:09
【问题描述】:
我在我的 Linux 系统上用 C 语言编写了一个 GTK 应用程序。 目前,我可以打开或启动我的应用程序的多个实例。 如何修改代码,使一次最多只能运行一个实例?
我知道有很多方法可以实现这一目标。 一种是使用 X 选择;另一种是使用管道/锁定文件;还有一种是使用D-Bus。
我想使用 D-Bus,但不知道如何使用。
【问题讨论】:
我在我的 Linux 系统上用 C 语言编写了一个 GTK 应用程序。 目前,我可以打开或启动我的应用程序的多个实例。 如何修改代码,使一次最多只能运行一个实例?
我知道有很多方法可以实现这一目标。 一种是使用 X 选择;另一种是使用管道/锁定文件;还有一种是使用D-Bus。
我想使用 D-Bus,但不知道如何使用。
【问题讨论】:
您可以使用GtkApplication,默认为您提供单实例支持。
如果您不能使用GtkApplication,那么您可以使用libunique(GtkApplication 已弃用,但适用于 GTK+ 2.x 和 GTK+ 3.x):https://wiki.gnome.org/LibUnique
或者,您可以实现 GtkApplication 和 libunique 使用的相同系统,该系统基于 DBus:您应该首先为您的应用程序获取一个众所周知的名称,如果某些东西已经存在那个众所周知的名字,意味着已经有一个实例在运行,然后退出你的应用程序。
【讨论】:
GtkApplication 是你想要的。基本上,您需要做的就是将一个唯一的字符串传递给gtk_application_new()。其基类页面GApplication 解释了详细信息。
【讨论】: