bonjour,
peut-être le sujet a-t-il déjà été traité, mais je ne trouve pas de cas similaire.
Il y a peu j'ai essayé de m'initier aux thread sur C++ (déjà que mon niveau dans ce langage n'est pas très haut)
je travaille actuellement sur un algo de calcul d'itinéraire qui doit se faire en plusieurs étapes. J'essaie donc pour raccourcir les temps de calcul de faire en sorte que chaque étape se fasse en parallèle via le multithreading.
je suis sous windows xp, IDE Eclipse c++. j'ai installé la librairie Boost pour les thread. (cela a d'ailleurs fait l'objet d'un autre topic la semaine passée)
J'ai commencé à implémenter sur un programme test le multithreading, pas de problème.
Maintenant lorsque j'essaie de l'inclure dans mon programme, il me sort une erreur lors de l'exécution (la compilation et le build se font sans problème) :
"The exception unknown software exception (0x0000005) occured in the application at location 0x7d..."
dans une popup
voici la structure locale du programme :
comme on peut le voir, j'ai essayé de mettre un mutex, mais cela ne change en rien le comportement.
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
40
41
42
43
44
45 bool IGraph::optimalTripChain(BDD &db, vector<ItiSearch> search, unsigned int numSearch) { thread_group threadGroup; for (int i=0; i<nbSteps; i++){ try{ cout<<"--- debut iteration ---"<<endl; threadGroup.create_thread(bind(&IGraph::calculLabelThread,this,db));//,search,numSearch)); cout<<"--- fin iteration ---"<<endl; } catch(const char *p) { cout << "caught " << p; } } //suite du code return true; } void IGraph::calculLabelThread(BDD &db){ boost::mutex::scoped_lock lock(mutexTraitement); try{ cout<<" dans le thread ..."<<endl; //code de calcul d'itineraire, mis en commentaire pour le debugage } catch(const char *p) { cout << "caught " << p; } cout<<"- fin fonction -"<<endl; }
L'ajout d'un try catch qui encapsule l'appel de la fonction du thread, tout comme l'ajout d'un try catch à l'intérieur de la fonction du thread, n'y change rien non plus.
Si quelqu'un a une idée d'où peut provenir le problème...
merci d'avance
Edit : une petite précision
la source de l'erreur doit probablement venir du paramètre passé dans la fonction, car sans paramètre, l'exécution se produit normalement.
seulement, au vu de la structure du reste du programme, je ne peux pas faire autrement sans changer tout le code (ce qui serait impossible vu le temps dont je dispose)
Partager