IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Threads & Processus C++ Discussion :

multithreading, unkown exception


Sujet :

Threads & Processus C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 29
    Par défaut multithreading, unkown exception
    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 :

    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;
     
    }
    comme on peut le voir, j'ai essayé de mettre un mutex, mais cela ne change en rien le comportement.
    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)

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,
    Il ne manquerait pas un join quelque part en l'absence duquel ton objet IGraph ou ton paramètre est détruit lorsque les fonctions des theads s'exécutent ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 29
    Par défaut
    Merci pour la réponse

    le fait d'ajouter join_all après la boucle ne change rien

    En revanche, j'ignore la forme du code à mettre si je met join à la suite de chaque appel au thread dans la boucle, je suis en train de regarder ça.

Discussions similaires

  1. MultiThread gestion exceptions
    Par diaboloche dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 07/02/2013, 14h48
  2. [C#] multithread et gestion des exceptions
    Par Invité dans le forum Développement Windows
    Réponses: 11
    Dernier message: 20/07/2010, 23h28
  3. Catch exception multithread
    Par Troopers dans le forum C#
    Réponses: 5
    Dernier message: 25/06/2010, 00h20
  4. Serveur multithread - Exception : java.util.ConcurrentModificationException
    Par rXpCH dans le forum Développement Web en Java
    Réponses: 13
    Dernier message: 08/07/2009, 09h19
  5. Exception sur Multithreading
    Par emap dans le forum VB.NET
    Réponses: 11
    Dernier message: 24/11/2007, 09h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo