Bonjour a tous,
J'utilise Boost::thread dans un jeu en reseau que je suis en train de programmer.
Du cote reseau, je dois au debut de mon programme faire un test de connexion pour une liste de plusieurs ip (listIP).
Ces deux fonctions font leur travail correctement et je me retrouve avec une liste d'ip valides.
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
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 /* ** Test if the ip passes in parameter corresponds to an existing spoVnet */ void RaceManager::IsCreated(std::string ip) { cout << "\n<<<<<<<<<<<<< CREATE NEW THREAD >>>>>>>>>>>>\n" << endl; boost::mutex::scoped_lock lock(m); m_aribanet = new AribaNet("NULL"); if (!m_aribanet->spoVnetIsCreated(ip)) { spoVnetCreated.push_back(ip); } cout << "\n<<<<<<<<<<<<< EXITED THREAD >>>>>>>>>>>>\n" << endl; } /* ** Function to multithread the test of ip connection */ std::vector<std::string> RaceManager::isConnected() { if (fullListIP() == 0) { boost::thread_group group; int i; for (i = 0; i < listIP.size(); i++) { group.create_thread(boost::bind(&RaceManager::IsCreated, this, listIP.at(i))); //boost::thread t(boost::bind(&RaceManager::IsCreated, this, listIP.at(i))); } group.join_all(); } // Return a full list of connected IP return spoVnetCreated; }
Mon vrai probleme, c'est que j'ai utilise les threads car ma fonction isCreated() est tres couteuse en memoire sauf que je ne beneficie pas de l'avantage des threads a savoir, l'execution paralelle.
J'ai rajoute des sdt::cout au debut et a la fin de ma fonction pour voir un peu le mecanisme de creation sur la console et bizarement, ma fonction me cree bien tous mes thread en meme temps (Tous mes cout sont present) mais les execute un part un en commencant par le premier cree (cout a chaque fin de traitement).
Du coup, mon execution qui devrait durer 2 seconde pour mes 30 ip me prend 1 minutes
(2s * 30).
Je suis au courant que dans le concept, les thread ne font que simuler une execution paralelle sauf que la, j'ai l'impression que je suis sur du pur sequentiel.
Si quelqu'un comprend mon probleme et sait le corriger, je lui en serais reconnaissant
Merci d'avance a tous ceux qui essayront de m'aider.
Bonne soiree
Partager