2010-05-31 10 views
1

Je lis par un tutoriel sur l'utilisation de commandes vocales pour contrôler les applications et, dans un exemple de contrôle rhythmbox, il suggère des commandes telles que les suivantes peuvent être exécutées:C++ passage d'arguments à un programme déjà en cours d'exécution

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

Pourquoi cela n'ouvre-t-il pas simplement une nouvelle instance du programme, et comment puis-je émuler la fonctionnalité dans mes propres programmes? Par exemple, comment pourrais-je passer une chaîne à une instance particulière d'un programme?

Merci

Répondre

4

Rhythmbox utilise communictation inter-processus pour réaliser ce type de fonctionnalité, et cela peut être mis en œuvre un certain nombre de façons différentes. L'un d'eux est d'utiliser D-Bus, comme le fait Rhythmbox. L'utilisation de D-Bus n'est pas très simple, mais l'idée de base est que vous enregistrez votre application dans D-Bus. Ainsi, d'autres applications peuvent appeler différentes procédures que votre application exporte (par exemple, actions de lecture/arrêt), puis la même application implémente un client. De cette façon, si des arguments tels que --play sont passés, vous n'exécutez pas le code habituel, mais recherchez simplement une instance de l'application en cours d'exécution et envoyez une commande à votre programme en cours d'exécution. D'autre part, quand aucun argument n'est passé, votre programme démarre et enregistre les déclencheurs appropriés, de sorte qu'une instance appelée plus tard puisse le contrôler.

Voici un tutorial sur dbus et the DBus homepage

0

Il existe plusieurs techniques pour avoir une seule instance d'application en cours d'exécution. Dans ces termes appelant yyy --play serait généralement le même sens que

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

Par exemple, comment pourrais-je passer une chaîne à une instance particulière d'un programme?

Vous devrez utiliser les fonctions de communication interprocess que votre système d'exploitation offre. Sockets ou pipes nommées, par exemple, ou messages.

Questions connexes