Je ne sais pas ou en est le commité sur la gestion des processus, et j'ai du mal à trouver les documents qui correspondent au travail du workshop concurrence.
Quoi qu'il en soit, je pensais faire une proposition, mais plutôt que de l'adresser au commité sans préparation, je voulais auparavant passer par vous - parce que vous êtes un communauté de gens vachement doués
Le texte de la proposition n'est pas finalisé, donc ce post préliminaire va servir à présenter une implémentation possible sous linux d'une classe std::process - et du namespace std::this_process. Ceux qui voient une ressemblance avec la classe std::thread voient juste : la classe std::process a exactement la même interface, à un poil près (il n'y a pas de méthode hardware_concurrency(), puisque ça n'a pas de sens). La classe process::id n'est pas complète pour l'instant (il manque de nombreux opérateurs).
Le code se compile simplement : make va construire l'exécutable ptest. Le code de ptest est le suivant :
Il faudrait l'étendre pour présenter les autres fonctionnalités de la classe et du namespace correspondant (notamment this_process::exec()). Je vais faire ça dans la journée (ou dans la soirée).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 #include <thread> #include <iostream> #include <cstdlib> #include <process> int main() { std::process p([=]() { std::cout << "- this process : " << std::this_process::get_id() << std::endl; std::exit(EXIT_SUCCESS); }); std::cout << "+ this process : " << std::this_process::get_id() << std::endl; std::cout << "+ before join() : " << p.get_id() << std::endl; p.join(); std::cout << "+ after join() : " << p.get_id() << std::endl; std::cout << "+ this process : " << std::this_process::get_id() << std::endl; }
L'implémentation sous Windows viendra lorsque j'aurais le temps (allez, on va dire : assez rapidement quand même ; le point ennuyeux étant le fork(), mais je sais comment passer outre, donc ça ira).
Je joint l'implémentation sous la forme d'un tar.bz2, mais vous pouvez trouver une version plus à jours à l'adresse suivante : https://code.google.com/p/edt-process-cpp1y/
git clone https://code.google.com/p/edt-process-cpp1y/
Vous permettra de récupérer le repository, dans lequel se trouvera rapidement un document lyx.
Partager