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 et fonction avec plusieurs paramètres


Sujet :

C

  1. #1
    Nouveau membre du Club
    Inscrit en
    Août 2010
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 22
    Points : 32
    Points
    32
    Par défaut threads et fonction avec plusieurs paramètres
    bonjour je réalise un programme avec les sockets j'ai créer la fonction "émission" qui envoi un message je voulais créer un thread où cette fonction s'executera pour quelle ne soit pas bloqué par la fonction recv() ;le probleme est que les threads prennent les fonctions sans parametres (void* mafonction(void * data) ;je ne sais pas comment adapter ma fonction à un thread
    voici la fonction "émission" :

    void emission(int sock){
    char buffer[255];
    char chaine[1000];
    fflush(stdin);
    printf("client :");
    gets(chaine);
    sprintf (buffer, "%s\n", chaine);
    send (sock, buffer, strlen (buffer), 0);
    }

    création du thread : pthread_t thread;
    pthread_create(&thread, NULL, emission, NULL);
    le compilateur signale une erreur à emission ce qui est normal ;comment faire ?
    svp aidez moi !

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Points : 1 750
    Points
    1 750
    Par défaut
    Salut

    le probleme est que les threads prennent les fonctions sans parametres (void* mafonction(void * data) ;
    La fonction n'est pas sans paramètre. Il y en a justement un, et il est de type "pointeur sur void" : http://pubs.opengroup.org/onlinepubs...ad_create.html

    Si tu veux passer un objet de type int à la fonction qui tournera dans ton nouveau thread, il faut donner son adresse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pthread_create(&thread, NULL, emission, &objet);
    Et adapter (de plus, la fonction doit renvoyer un pointeur sur void) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void * emission(void * adresse_objet)
    {
       int objet = * (int*) adresse_objet;
    ...
    }
    Deux choses, au passage :
    Il ne faut jamais faire de fflush sur stdin.

    gets est une fonction très dangereuse : risque de dépassement de tampon et exécution de code arbitraire. Il faut utiliser fgets à la place.

Discussions similaires

  1. Réponses: 32
    Dernier message: 28/11/2010, 17h33
  2. Appel d'une fonction avec plusieurs paramètres
    Par kazarn dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 06/06/2009, 18h55
  3. créer une fonction avec plusieurs paramètres
    Par SHERPAE dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 06/01/2009, 17h41
  4. Aide pour déclarer fonction avec plusieurs paramètres de sortie
    Par tonioj41 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 16/01/2008, 11h06
  5. [Système] Fonction avec plusieurs paramètres optionnels
    Par cerede2000 dans le forum Langage
    Réponses: 1
    Dernier message: 25/05/2007, 14h36

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