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

Boost C++ Discussion :

aide boost threads


Sujet :

Boost C++

  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 92
    Par défaut aide boost threads
    bonjour,

    je développe des programmes avec java depuis quelques temps maintenant et j'ai décidé de me mettre au c++.
    Pour cela je vais donc mettre en place une application qui me trotte dans la tête depuis peu.
    Le problème est que mon application doit utiliser des threads.
    Ne voulant pas me planter je réfléchis toujours à la conception du logiciel et parallèlement à ça je teste des petits programmes qui ne servent à rien mais qui me permettent de comprendre les subtilités du c++.

    Sauf que là je tombe sur des erreurs que j'ai du mal à résoudre.

    je vous montre le bout de code, vous ne devriez pas avoir de mal à comprendre ce qu'il est censé faire.

    testClass.h
    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
     
    #include <iostream>
    #include <boost/thread/thread.hpp>
     
    using namespace std;
     
    class testClass
    {
    	private:
    		int m_X;
    		int m_Y;
    		unsigned int m_R;	
    	public:
    		testClass(); //mon constructeur ne sert a rien mais je ne crois pas que çà pose probleme
    		void uneFonction();
    		void uneAutreFonction();
    };
    testClass.cpp
    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
     
    #include <iostream>
    #include <boost/thread/thread.hpp>
    #include "testClass.h"
     
    testClass::testClass()
    {
    	m_X = m_Y = m_R = 0;
    }
     
    void testClass::uneFonction()
    {
    	boost::thread unThread(&uneAutreFonction);
    }
     
    void testClass::uneAutreFonction()
    {
    	cout << "un thread\n";
    }
    Je compile cette classe avec cette commande : g++ testClass.cpp -lboost_thread-mt -c

    Je vous posterais bien le message mais il est tellement gros je préfère attendre Bien entendu j'ai installé correctement boost.

    Je ne comprend pas ce qui ne vas pas, il me manque sans doute deux ou trois notions pourriez vous m'aider ?

    Merci.

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Le constructeur de boost::thread prend en paramètre un foncteur qui ne prend pas d'argument et ne retourne rien.
    Par exemple, un pointeur vers une fonction void f().

    Toi, tu lui passes uneAutreFonction, qui est une fonction membre non-statique de la classe testClass.
    Donc forcément, ça va pas...

    Le plus simple est probablement d'écrire
    boost::thread unThread(boost::bind(&uneAutreFonction, this));

    en incluant <boost/bind.hpp>

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 92
    Par défaut
    merci de m'avoir répondu, j'ai testé les deux méthodes mais j'ai toujours une erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    g++: -lboost_thread-mt: linker input file unused because linking not done
    Pourtant il ne me semble pas avoir oublié quelque chose :
    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
     
    #include <iostream>
    #include <boost/thread/thread.hpp>
    #include <boost/bind.hpp>  
    #include "testClass.h"
     
    testClass::testClass()
    {
    	m_X = m_Y = m_R = 0;
    }
     
    void testClass::uneFonction()
    {
    	boost::thread unThread( boost::bind( &testClass::uneAutreFonction, this ) );
    }
     
    void testClass::uneAutreFonction()
    {
    	cout << "un thread\n";
    }
    Je compile le fichier avec cette commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    g++ testClass.cpp -lboost_thread-mt -c

  4. #4
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    -c = pas d'édition des liens (faut regarder l'aide de gcc pour voir à quoi correspondent les options )

  5. #5
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 92
    Par défaut
    aah ok je mettais l'argument -c plus par habitue que par nécessité dsl ^^"

    j'ai déjà utilisé "man g++" mais c'est assez bourin comme commande

    Merci à loufoque et Matthieu Brucher j'ai appris pas mal de chose depuis mon premier poste !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Arreter l'execution d'un boost::thread
    Par stranger dans le forum Boost
    Réponses: 9
    Dernier message: 22/05/2007, 18h37
  2. [Débutant] boost::thread non-lvalue
    Par Tymk dans le forum Boost
    Réponses: 16
    Dernier message: 18/11/2006, 14h23
  3. Questions de perfomance avec boost::thread
    Par Rafy dans le forum Boost
    Réponses: 36
    Dernier message: 05/10/2006, 15h21
  4. boost::thread et OpenGL
    Par Kurisu dans le forum Boost
    Réponses: 12
    Dernier message: 19/09/2006, 13h23

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