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:
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
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