C ++将参数传递给已经运行的程序

时间:2010-05-31 13:42:38

标签: c++

我正在阅读有关使用语音命令控制应用程序的教程,在控制rhythmbox的示例中,它建议执行以下命令:

rhythmbox-client --play
rhythmbox-client --pause

为什么这不是简单地打开程序的新实例,如何在我自己的程序中模拟功能?例如,我如何将字符串传递给程序的特定实例?

由于

3 个答案:

答案 0 :(得分:4)

Rhythmbox使用进程间通信来实现此类功能,这可以通过多种不同方式实现。其中一个是使用D-Bus,就像Rhythmbox那样。

使用D-Bus并不是很容易,但基本的想法是你在D-Bus中注册你的应用程序,所以其他应用程序可以调用你的应用程序导出的不同程序(例如播放/停止动作),然后在相同的应用程序实现客户端这样,如果传递--play之类的参数,则不会运行常用代码,只需检查正在运行的应用程序的实例并向已运行的程序发送命令。

另一方面,当没有传递参数时,程序就会启动并注册正确的触发器,以便后来调用的实例可以控制它。

这是dbus上的tutorialthe DBus homepage

答案 1 :(得分:0)

有几种技术只能运行一个应用程序实例。在这些术语中,调用yyy --play通常与

相同
INSTANCE = GET_RUNNING_INSTANCE()
IF INSTANCE == NULL
   INSTANCE = CREATE_NEW_INSTANCE()
SEND_MESSAGE(INSTANCE, PLAY)

答案 2 :(得分:0)

  

例如,我如何将字符串传递给程序的特定实例?

您需要使用操作系统提供的任何进程间通信工具。例如,套接字或命名管道,或消息。