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 :

question syntaxe C sur prototype pthread_create


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2010
    Messages : 18
    Points : 20
    Points
    20
    Par défaut question syntaxe C sur prototype pthread_create
    Bonjour,

    Dans ce prototype,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
           int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
                              void *(*start_routine) (void *), void *arg);
    Je ne comprends pas la syntaxe de l'argument void *(*start_routine) (void *)

    Cet argument muet est de type void *. Le nom de l'argument (*start_routine) (void *) n'a aucune importance, est purement indicatif et c'est lui que je ne comprends pas.

    (start_routine *) (void *) aurait pour moi signifier un cast d'un argument void * en *start_routine.
    Mais le fait d'avoir (*start_routine), soit * en premier est une forme que je n'ai jamais rencontré pour un cast de pointeur de forme générique (type *). Est-ce que (* type) serait équivalent à (type *) ?

    Bref c'est très étrange pour moi. Merci pour vos lumière.

  2. #2
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void *(*start_routine) (void *)
    - Dans void * X (void *) , X désigne une fonction retournant void* et ayant un argument du type void*

    - Donc (*start_routine) est une fonction retournant void* et ayant un argument du type void*

    - Donc start_routine, le nom du paramètre, est pointeur sur fonction retournant void* et ayant un argument du type void*
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  3. #3
    Membre expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Points : 3 352
    Points
    3 352
    Par défaut
    Salut,

    void *(*start_routine) (void *) signifie

    start_routine est une fonction qui prend pour argument un void* et qui retourne un void*. Dans ton cas il s'agit de la fonction qui fait le boulot dans le thread. Par exemple tu pourrais avoir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void* JustDoIt(void* arg)
    {
        return (void *)SommeEntiersDe0A((int) arg);
    }
    JustDoIt sera exécutée dans le thread et calculera la somme des entiers de 0 à l'entier représenté par arg.

    Tu crées un thread qui calcule la somme des entiers de 0 à 1000 avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int pthread_create(&thread, &attr, JustDoIt, (void *)1000);
    Références : les man pages
    man pthread_create
    man pthread_join

    http://www.yolinux.com/TUTORIALS/Lin...ixThreads.html

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2010
    Messages : 18
    Points : 20
    Points
    20
    Par défaut
    Merci à tous les deux pour vos réponses et aussi pour ce lien très utile

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 04/05/2009, 08h31
  2. question toute simple sur la syntaxe
    Par calitom dans le forum Langage
    Réponses: 3
    Dernier message: 15/06/2006, 16h26
  3. question de débutant sur les objets
    Par boucher_emilie dans le forum ASP
    Réponses: 3
    Dernier message: 06/08/2004, 10h51
  4. [Débutant]Quelques questions de principe sur l'API win32
    Par silver_dragoon dans le forum Windows
    Réponses: 4
    Dernier message: 19/03/2004, 18h38
  5. [LG]J'ai honte : question de cours sur les paramètres
    Par letibdesneiges dans le forum Langage
    Réponses: 14
    Dernier message: 17/01/2004, 13h57

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