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 :

passer un tableau d'arguments à un thread


Sujet :

POSIX C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 29
    Points : 28
    Points
    28
    Par défaut passer un tableau d'arguments à un thread
    bonjour tout le monde
    je suis en train de faire un programme de producteur consomateur pour copier une arborescence.
    mon souci est de pouvoir passer un tableau de structure à un thread(prooducteur)
    j'ai une erreur "AVERTISSEMENT: passage de arg 3 de « pthread_create » d'un type pointeur incompatible"

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    #include <stdio.h>
    #include <sys/types.h>
    #include <dirent.h>
    #include <string.h>
    #include <unistd.h>
    #include <sys/stat.h>
    #include <pthread.h>
    #include "file.h"
    #include "tp2.h"
     
    //int MAX_BUFF  ;
    acopier *Buffer[10];
    int MAX_BUFF;
     
    //Les mutex
    pthread_mutex_t global_mutex;
    pthread_mutex_t global_mutex2;
    pthread_cond_t tampon_cond_plein;
    pthread_cond_t tampon_cond_vide;
     
    int tache_non_termine = VRAI;
     
    //L'index du buffer
    typedef int sem;
    sem etat_buff = 0;
     
    int main(int argc ,char * argv[])
    {
       void* arguments[2];
     
       MAX_BUFF = 4;//Max travaille la dessus.
     
       //Les mutex et conditions
       pthread_mutex_init(&global_mutex, NULL);
       pthread_mutex_init(&global_mutex2, NULL);
       pthread_cond_init(&tampon_cond_plein, NULL);
       pthread_cond_init(&tampon_cond_vide, NULL);
     
       //Thread producteur
       pthread_t prod_thread;
     
      arguments[0] = (char *) argv[1];
      arguments[1] = (char *) argv[2];
     
      //creation du produceur
      pthread_create(&prod_thread, NULL, producteur, *arguments);
     
        return 0;
       //DIR *repsource;
    }
     
    void* producteur(void* args[])
    {
     
       f = creerFile(sizeof(acopier));
       source = (char *) args[0]; 
       dest = (char *) args[1];
       ...
    ....
      printf("debut producteur + %s\n", source);//ici j'ai segmentation fault par exemple
     
    ...
    ...
     
     
    	}
    quelqu'un peut il m'aider sur comment passer cet arguments??
    j'en serais vraiment reconnaissant

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    Il me semble ( à vérifier) que pthread_create attend un void * et non pas un void *[] ( voir le prototype dans le man).

    Normalement pthread_create(...,argv) devrait suffir.
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

  3. #3
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut Re: passer un tableau d'arguments à un thread
    Citation Envoyé par madimane
    je suis en train de faire un programme de producteur consomateur pour copier une arborescence.
    mon souci est de pouvoir passer un tableau de structure à un thread(prooducteur)
    j'ai une erreur "AVERTISSEMENT: passage de arg 3 de « pthread_create » d'un type pointeur incompatible"
    Le paramètre qui sert à passer l'argument est de type void*. Ca veut dire qu'il suffit de passer une adresse d'objet. Attention, l'adresse doit être valide pendant la durée de l'exécution du thread.

    Dans le thread, tu initialises un pointeur local du bon type avec l'adresse reçue via le paramètre void * (même pas besoin de cast) et tu as accès aux données.

    C'est une méthode de codage appelée 'programmation générique'. C'est très utilisé...

    http://emmanuel-delahaye.developpez.com/pthreads.htm
    Pas de Wi-Fi à la maison : CPL

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 29
    Points : 28
    Points
    28
    Par défaut
    ok merci
    je vais passer par une structure au lieu d'un tableau d'arguments;

    genre
    struct source_dest{
    char* source;
    char* dest;
    };
    et après je travaille avec dans producteur.
    merci pour votre aide VIP et hegros
    en passant VIP ton document m'a vraiment aider à comprendre comment ca marche.
    merci

  5. #5
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par madimane
    merci pour votre aide VIP et hegros
    en passant VIP ton document m'a vraiment aider à comprendre comment ca
    "Hi, my name is Delahaye, Emmanuel Delahaye."
    Pas de Wi-Fi à la maison : CPL

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 29
    Points : 28
    Points
    28
    Par défaut
    je m'excuse
    merci delahaye

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

Discussions similaires

  1. passer un tableau en argument
    Par vinowan dans le forum Débuter
    Réponses: 3
    Dernier message: 01/07/2009, 16h56
  2. Comment passer un tableau en argument de fonction
    Par Winnyls dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 19/03/2009, 17h36
  3. Passer un tableau comme argument
    Par sinfos dans le forum Tcl/Tk
    Réponses: 1
    Dernier message: 19/02/2009, 09h29
  4. passer un tableau en argument dans une fonction
    Par rogerio dans le forum Débuter
    Réponses: 6
    Dernier message: 30/10/2008, 12h15
  5. passer un tableau en argument
    Par lanfeust42 dans le forum Langage
    Réponses: 3
    Dernier message: 29/08/2006, 19h32

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