2009-03-16 12 views

Répondre

5

Toutes les variantes exec, y compris execvp(), peuvent uniquement appeler des programmes complets visibles dans le système de fichiers. Les bonnes nouvelles sont que si vous voulez appeler une fonction dans votre programme déjà chargé, tout ce dont vous avez besoin est fork(). Il ressemblera à quelque chose comme ce pseudo-code:

int pid = fork(); 
if (pid == 0) { 
    // Call your function here. This is a new process and any 
    // changes you make will not be reflected back into the parent 
    // variables. Be careful with files and shared resources like 
    // database connections. 
    _exit(0); 
} 
else if (pid == -1) { 
    // An error happened and the fork() failed. This is a very rare 
    // error, but you must handle it. 
} 
else { 
    // Wait for the child to finish. You can use a signal handler 
    // to catch it later if the child will take a long time. 
    waitpid(pid, ...); 
} 
2

excecvp() est destiné à démarrer un programme pas une fonction. Donc, vous devrez envelopper cette fonction dans un fichier exécutable compilé et ensuite avoir l'appel principal de ce fichier votre fonction.

0

Les processus de création peuvent être lourds. Si vous voulez seulement appeler votre fonction en parallèle, pourquoi ne pas utiliser les threads. Il existe de nombreuses bibliothèques indépendantes de la plate-forme disponibles qui ont un support de thread pour C++ comme Boost, QT ou ACE.

Si vous avez vraiment besoin que votre fonction soit exécutée dans un autre processus, vous pouvez utiliser fork ou vfork. vfork peut ne pas être disponible sur toutes les plates-formes et il est drawbacks alors assurez-vous que vous pouvez l'utiliser. Si ce n'est pas juste utiliser une fourchette.

Questions connexes