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

POSIX C Discussion :

problème thread : pointeurs de fonctions


Sujet :

POSIX C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Juillet 2010
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 33
    Points : 28
    Points
    28
    Par défaut problème thread : pointeurs de fonctions
    Bonjour,
    Je suis entrain de me renseigner à propose des threads POSIX sous unix,
    Lors de la première lecture d'un exemple, j'ai trouvé des difficultés pour le comprendre: ce sont des pointeurs de fonctions !!

    La fonction que le thread appelle est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void *mafonction(void *arg)
    {
    //bloc d'instructions
    }
    cette syntaxe corresponds à quoi !! ??
    je sais bien les pointeurs et leurs fonctionnement !!!

    cette syntaxe corresponds à un pointeur déclaré implicitement qui pointe et contient l'adresse de la fonction !!! et lorsqu'on appelle cette fonction(pointeur) on l'appelle par $mafontcion !!!!
    car lors de l'implémentation,
    on fait pthread_create($t,NULL,$mafonction,..)

    cela est-il juste !!!!
    aidez-moi à résoudre ce problème !

    merci d'avance à tous les développeurs !!!

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 378
    Points : 23 670
    Points
    23 670
    Par défaut
    Bonsoir,

    Un seul « ! » par phrase, s'il-te-plaît.

    Citation Envoyé par tech_77 Voir le message
    Bonjour,

    Je suis entrain de me renseigner à propose des threads POSIX sous unix,
    Lors de la première lecture d'un exemple, j'ai trouvé des difficultés pour le comprendre: ce sont des pointeurs de fonctions !!
    Une code d'une fonction a un emplacement en mémoire comme tout le reste et l'adresse de cet emplacement, comme tout le reste, peut être évalué et stocké dans un pointeur. La fonction qu'il concerne peut ensuite être appelée de manière indirecte.

    C'est pratique parce que cette adresse peut être transmise en argument ou stockée dans un tableau pour être indexée. Dans le cas qui t'intéresse, ça permet de faire des fonctions de callback.

    La fonction que le thread appelle est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void *mafonction(void *arg)
    {
    //bloc d'instructions
    }
    cette syntaxe corresponds à quoi !! ??
    C'est une fonction qui attend un pointeur de type void en argument et qui renvoie un autre pointeur de type void. Un pointeur de type void peut pointer n'importe quoi. Il n'y a rien qui nous dise qu'il s'agit d'un pointeur de fonction plus qu'autre chose, même si c'est peut-être le cas quand même.

    cette syntaxe corresponds à un pointeur déclaré implicitement qui pointe et contient l'adresse de la fonction !!! et lorsqu'on appelle cette fonction(pointeur) on l'appelle par $mafontcion !!!!
    car lors de l'implémentation,
    on fait pthread_create($t,NULL,$mafonction,..)

    cela est-il juste !!!!
    Pas avec un dollar « $ », en tout cas. Cette syntaxe n'est pas du C, sauf si tu utilises un pré-compilateur spécial.

  3. #3
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    Citation Envoyé par tech_77 Voir le message
    cette syntaxe corresponds à un pointeur déclaré implicitement qui pointe et contient l'adresse de la fonction !!!
    Absolument pas. Cette syntaxe définie une fonction "mafonction" qui prend en argument un pointeur void * et retourne un pointeur void *.

    Si tu veux définir un pointeur vers cette fonction, ça se passe comme ça (note bien où sont placées les parenthèses) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void *(*func_ptr)(void *) = mafonction;
    Et tu peux ensuite appeler la fonction pointée simplement par :

Discussions similaires

  1. Réponses: 4
    Dernier message: 05/04/2010, 18h46
  2. Problème de pointeur de fonction!
    Par tyke91 dans le forum C++
    Réponses: 2
    Dernier message: 16/06/2008, 12h25
  3. Problème thread pointeur non instancié
    Par Hurin dans le forum C#
    Réponses: 9
    Dernier message: 17/09/2007, 22h33
  4. Probléme de pointeur sur fonction
    Par TSalm dans le forum C++/CLI
    Réponses: 11
    Dernier message: 25/07/2007, 22h53
  5. Problème thread et fonction récursive
    Par cryptorchild dans le forum Langage
    Réponses: 3
    Dernier message: 27/09/2006, 12h19

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