2010-05-31 65 views
1

我通過使用語音的教程讀取程序指令,以控制應用程序,並且在控制的Rhythmbox的一個例子,它表明諸如命令可以執行以下操作:C++將參數傳遞給已經運行

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

爲什麼這不是簡單地打開一個新的程序實例,以及如何在我自己的程序中模擬功能?例如,我如何將字符串傳遞給程序的特定實例?

感謝

回答

4

的Rhythmbox使用進程間優秀的通信來實現這種類型的功能,這樣就可以在許多不同的方式來實現。其中之一是使用D-Bus,就像Rhythmbox一樣。使用D-Bus不是很容易,但基本的想法是,你在D-Bus上註冊你的應用程序,所以其他應用程序可以調用你的應用程序導出的不同過程(例如播放/停止操作),然後在相同的應用程序實現客戶端。這樣,如果像--play這樣的參數被傳遞,您不會運行通常的代碼,但只需檢查正在運行的應用程序的實例並將命令發送到已運行的程序。

在另一方面,如果沒有傳遞參數,你的計劃纔剛剛起步,並註冊了適當的觸發器,從而使後來稱爲實例可以控制它。

這裏是一個DBUS tutorial,並且the DBus homepage

0

有幾種技術來只有一個應用實例中運行。在這方面呼籲yyy --play通常意味着同

INSTANCE = GET_RUNNING_INSTANCE() 
IF INSTANCE == NULL 
    INSTANCE = CREATE_NEW_INSTANCE() 
SEND_MESSAGE(INSTANCE, PLAY) 
0

例如,我怎麼能傳遞一個字符串到程序的特定實例?

您需要使用操作系統提供的任何進程間通信功能。例如套接字或命名管道或消息。