Bonjour à tous,

j'aimerai lancer plusieurs traitements répétés de complexité identiques en parallèle (en général 1, 2 ou 3) pour une appli temps-réel.
La création de thread étant couteuse, j'imagine qu'il vaut mieux tout créer au début du programme !

Supposons que j'aie dans ma classe de base de calcul un vector de thread.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
class Engine
{
//
private:
	CFPSCounter                                   m_fps_counter;
	std::vector<boost::shared_ptr<boost::thread>> m_execution_threads;
};
Je créé ensuite autant de threads que de traitements (2 par exemple).
Toutes les 20 ms, il faut que je relance les 2 traitements en parallèle.
Exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
m_execution_threads[0].reset(new boost::thread(
		boost::bind(&IVisionModule::Apply, m_vision_chains[0])));
m_execution_threads[1].reset(new boost::thread(
		boost::bind(&IVisionModule::Apply, m_vision_chains[1])));
Du coup, c'est pas terrible : ça risque d'être lent mon affaire... Le new me recréé un thread à chaque fois...

Vous avez une idée pour donner juste du travail à des threads?

P.S : J'ai pensé à boost::asio qui émule l'asynchronicité via un pool de thread (boost::asio::post() ), mais je sais pas si c'est bien performant tout ça. J'ai une limite de "souplesse" à échanger contre de la performance...