Ajouter un commentaire

K-lo
[C++/Boost::Thread] Problème gestion des ressources [résolu]

Voilà j'ai un programme multithreading qui a pour but d'effectuer plusieurs traitements sur plusieurs répertoires via des threads :

Chaque thread ne parcours qu'un répertoire et effectue les traitements.

Mon souci vient de la ressources:

class TraitementsSurRepertoire{
  void operator()() { lancementTraitements();}
  void lancementTraitements(){.....}
  TraitementsSurRepertoire(std::string nomRep);
};


std::vector<std::string> listeDesRepertoire;
 //...
boost::thread_group grp2Thread;

for(std::vector<std::string>::iterator it = listeDesRepertoires.begin(); it !=listeDesRepertoires.end(); ++it)
{
   TraitementsSurRepertoire traitementPr1Rep(*it);
   grp2Thread.create_thread( boost::ref(traitementPr1Rep) );
  
}
grp2Thread.join();

Cela ne fonctionne pas puisque les différentes instances sur TraitementsSurRepertoire sont "perdu" à chaque parcours de la boucle.
J'aimerai traiter ce bout de code de manière PROPRE sachant que je ne connais pas avant l'exécution du programme le nombre de répertoire à parcourir, la liste étant renseignée via un fichier de configuration.

J'ai essayé de stocker les instances dans un std::vector avant de créer un thread mais cela ne fonctionne pas (pour les même raisons sans doute).

Je pense que je n'utilise pas du tout la bonne approche mais... je suis trop têtu...

Edit (mais je sens que mes neurones sont à plat) : devrais-je garder la copie que fait boost en créant le thread? Copie évitée via l'instruction boost::ref() ?

Filtered HTML

Plain text

CAPTCHA
Cette question permet de vérifier que vous n'êtes pas un robot spammeur :-)
  QQQ    V     V  Y   Y  X   X  ZZZZZ 
Q Q V V Y Y X X Z
Q Q V V Y X Z
Q QQ V V Y X X Z
QQQQ V Y X X ZZZZZ
Q