Je sais que C ++ 11 a ajouté un support pour les threads. Par exemple:
#include <iostream>
#include <thread>
void bar()
{
std::cout << "bar()\n";
}
int main()
{
std::thread thread(bar);
thread.join();
return 0;
}
Cependant, existe-t-il un moyen d'exécuter le bar
fonctionner dans un processus séparé? Si ce n'est pas le cas, y a-t-il une discussion sur la possibilité d'ajouter une telle fonctionnalité?
Remarque: Je suis conscient de la possibilité d'utiliser des bibliothèques indépendantes de la plate-forme et je suis juste curieux de savoir si le C ++ le supporte directement ou le fera à l'avenir.
Non, le standard c ++ (en particulier C ++ 11) n’a aucune notion de processus (Je ne peux donc pas vous donner ici une référence plus raisonnable en tant que résultat de la recherche à partir du site de documentation c ++ le plus populaire et le plus actuel.
Je ne suis pas conscient non plus que le support de processus est prévu pour la prochaine version standard C ++ - 17 (alias C ++ - 1z). Au moins le Site Wikipedia n'en parle pas.
Il y a un populaire la mise en oeuvre cela a été proposé pour le boost, mais cela n'a jamais été dessiné pour une proposition standard C ++.
Vous ne pouvez généralement pas écrire de code portable pour exécuter sur des systèmes nus, où un seul processus existe
Cependant, existe-t-il un moyen d'exécuter le bar()
fonctionner dans un processus séparé?
L'option la plus simple est de se replier sur fork()
et wait()
comme spécifié par POSIX Open Group:
#include <iostream>
#include <unistd.h>
#include <sys/wait.h>
void bar()
{
std::cout << "bar()\n";
}
int main(int argc, char **argv)
{
pid_t pid = fork();
if (pid == 0)
{
// child process
bar();
}
else if (pid > 0)
{
// parent process
wait(NULL);
}
else
{
// fork failed
std::cerr << "fork() failed!" << std::endl;
return 1;
}
return 0;
}
Bien que je ne vois pas grand chose à créer un processus supplémentaire pour exécuter une fonction simple. Créer un processus crée beaucoup de surcharge que vous ne voulez pas dans un tel cas.
Eh bien, si vous voulez démarrer un autre programme en utilisant les fonctions du exec()
fonction famille qui est un cas d'utilisation différent.
Je recommande de s'en tenir à std::thread
s pour votre exemple.