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

C++ Discussion :

Threads en C++ (sans boost ?)


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 8
    Par défaut Threads en C++ (sans boost ?)
    Bonjour,

    je cherche à lancer une simple thread en c++, mais je me demandais s'il n'était pas possible de s'affranchir des librairies genre boost pour celà... J'imagine que celà n'est pas faisable, mais je voudrais surtout une confirmation afin de me convaincre.

    J'ai essayé par exemple d'utiliser pthread.h comme ceci :

    void testDaemon(void *params)
    {
    DemonstratorInt* demonstrator = (DemonstratorInt*)params ;
    }

    void DemonstratorInt::init()
    {

    // (...)

    pthread_t thread_commands;

    pthread_create(&thread_commands, NULL, (void *(*)(void *))testDaemon, this);

    // (...)

    }
    Celà me retournant une erreur :

    undefined reference to pthread_create

    (je précise que j'ai bien inclu la librairie )

    D'avance, merci beaucoup.
    Max.

  2. #2
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut


    Bienvenue à toi sur developpez.com

    Citation Envoyé par rbcmax
    (je précise que j'ai bien inclu la librairie )
    Dans ce cas, il faudrait aussi penser à inclure le fichier d'entête.

    Le terme librairie n'existe pas en français pour ce genre de chose. En effet, à chaque fois que tu utilises une fonction, tu ne vas pas l'acheter, on parle donc de bibliothèque. Et on inclut pas de bibliothèque, on inclut des fichiers d'entête et on lie les fichiers objets avec une bibliothèque. La traduction de Library en anglais est Bibliothèque en français, c'est vrai que c'est piégeux

    Je ne comprends pas le rapport avec boost, pthread est une bibliothèque indépendante et qui fonctionne en C.

    Regarde la page suivante qui est très bien :
    http://emmanuel-delahaye.developpez.com/pthreads.htm

    Si tu as un problème avec le premier programme, c'est qu'il doit te manquer des fichiers d'entêtes ou la bibliothèque.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 8
    Par défaut
    Hello

    En effet je voulais dire fichier d'en-tête par librairie, erreur de vocabulaire de ma part.

    Et je l'inclus bien ; si je supprime un argument de pthread_create, il me renvoie une erreur "blabla too few argument : prototype is (ici suit le prototype de pthread_create"). J'imagine que si je ne l'avais pas correctement inclus, je n'aurais pas ca.

    On dirait que j'ai le message d'erreur que j'ai cité plus haut dès que ma fonction est correctement appellée... A la moindre petite erreur dans son appel il me la signale correctement.

    Ce serait donc un problème sur le système même ? Ou bien le C++ a du mal avec les fonctions écrites pr le C ?

  4. #4
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    Ton cast est bizarre, essaye juste ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    thread_create(&thread_commands, NULL, testDaemon, this);

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 8
    Par défaut
    Citation Envoyé par millie
    Ton cast est bizarre, essaye juste ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    thread_create(&thread_commands, NULL, testDaemon, this);
    Même erreur (j'ai essayé plein de combinaisons possibles en fait, dont celle là )

  6. #6
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    Bon, je suis pas trop un spécialiste de ça, d'après ce que j'ai lu, il y en a qui ont des problèmes avec pthread en C++ et utilisent plutôt boost.thread ou Qthread.

    Alors, comme je n'ai rien pour tester sous la main, essaye ces codes ci :

    Compile avec gcc.

    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
    #include <stdio.h>
     
    #include <pthread.h>
     
    static void *task_a (void *p_data)
    {
       puts ("Hello world A");
     
       (void) p_data;
       return NULL;
    }
     
    static void *task_b (void *p_data)
    {
       puts ("Hello world B");
     
       (void) p_data;
       return NULL;
    }
     
    int main (void)
    {
       pthread_t ta;
       pthread_t tb;
     
       puts ("main init");
     
       pthread_create (&ta, NULL, task_a, NULL);
       pthread_create (&tb, NULL, task_b, NULL);
     
       puts ("main end");
     
       return 0;
    }
    Et (compile avec g++) :
    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
    #include <cstdio>
     
    #include <pthread.h>
     
    static void *task_a (void *p_data)
    {
       puts ("Hello world A");
     
       (void) p_data;
       return NULL;
    }
     
    static void *task_b (void *p_data)
    {
       puts ("Hello world B");
     
       (void) p_data;
       return NULL;
    }
     
    int main (void)
    {
       pthread_t ta;
       pthread_t tb;
     
       puts ("main init");
     
       pthread_create (&ta, NULL, task_a, NULL);
       pthread_create (&tb, NULL, task_b, NULL);
     
       puts ("main end");
     
       return 0;
    }
    Etant donné qu'il y a une différence avec le void* en C++ et en C+, je pensais que le problème venait de là.

  7. #7
    Membre expérimenté
    Avatar de David Fleury
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 253
    Par défaut
    undefined reference...
    c'est plutôt une erreur de link.

    as-tu mis -lpthread dans ta ligne de commande ?
    ex:
    g++ -O3 -D_REENTRANT ton_source.cpp -lpthread

    donc d'après ton premier message oui...
    il faudrait vérifier s'il faut les extern "C" autour de ton include <pthread.h>
    (genre ifdef _cpluplus....)

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

Discussions similaires

  1. Sérialisation en binaire (sans Boost)
    Par fleorock24 dans le forum C++
    Réponses: 7
    Dernier message: 10/06/2009, 08h51
  2. [Thread] [synchronised] utilisation sans thread
    Par philippe13 dans le forum AWT/Swing
    Réponses: 8
    Dernier message: 01/03/2007, 09h25
  3. Sérialisation d'objets sans Boost
    Par Alp dans le forum Boost
    Réponses: 7
    Dernier message: 24/09/2006, 11h43
  4. Boost et les Threads
    Par TuRn3r dans le forum Bibliothèques
    Réponses: 6
    Dernier message: 10/05/2006, 10h50
  5. [Thread]Boucle infinie sans 99% du proc
    Par dinver dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 18/12/2005, 17h15

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