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.
Je créé ensuite autant de threads que de traitements (2 par exemple).
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; };
Toutes les 20 ms, il faut que je relance les 2 traitements en parallèle.
Exemple :
Du coup, c'est pas terrible : ça risque d'être lent mon affaire...
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])));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...
![]()
Partager