Probleme passage argument thread
Bonjour,
Je suis débutant dans la création de thread et j'ai pu comprendre qu'on ne pouvais passer qu'un seul argument dans la fonction pthread_create().
Par conséquent j'ai créer une structure avec toutes mes variables a faire passer.
Voici un extrait de mon code :
Code:
1 2 3 4 5 6 7
|
typedef struct thread
{
espece ** mer;
SDL_Surface * images[20];
humain * pecheur;
} donnee_t ; |
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 67 68
|
int start()
{
int i;
int j;
pthread_t th_eco;
pthread_t th_affichage;
abscisse_sortie=TAILLE_MER-1;
SDL_Surface * images[20];
init_images(images);
espece** mer;
humain* pecheur;
srand(time(NULL));
mer=(espece**)malloc(TAILLE_MER*sizeof(espece*));
for(j=0;j<TAILLE_MER;j++)
{
mer[j]=(espece*)malloc(TAILLE_MER*sizeof(espece));
}
donnee_t transfert;
transfert.mer=(espece**)malloc(TAILLE_MER*sizeof(espece*));
for(j=0;j<TAILLE_MER;j++)
{
transfert.mer[j]=(espece*)malloc(TAILLE_MER*sizeof(espece));
}
pecheur=malloc(sizeof(humain));
transfert.pecheur=malloc(sizeof(humain));
initialisation_mer(mer);
initialisation_pecheur(pecheur);
for(i=0;i<TAILLE_MER;i++)
{
for(j=0;j<TAILLE_MER;j++)
{
transfert.mer[i][j].type=mer[i][j].type;
.............
transfert.mer[i][j].age=mer[i][j].age;
}
}
(*transfert.pecheur).nom=(*pecheur).nom;
....................
(*transfert.pecheur).taille_sac_max=(*pecheur).taille_sac_max;
for(j=0;j<20;j++)
{
transfert.images[j]=images[j];
}
pthread_create(&th_eco, NULL,(void *(*)())thread_eco, &transfert);
pthread_create(&th_affichage, NULL,(void *(*)())thread_affichage, &transfert);
pthread_join (th_eco, NULL);
pthread_join (th_affichage, NULL);
...
} |
Et voila mes deux threads :
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
| void *thread_eco(donnee_t donnees)
{
int j,k;
while(quit==0)
{
controle_population(donnees.mer);
tour_courant++;
for(j=0;j<TAILLE_MER;j++)
{
for(k=0;k<TAILLE_MER;k++)
{
if(donnees.mer[j][k].type!=TYPE_SOL && donnees.mer[j][k].type!=TYPE_PONT)
{
donnees.mer[j][k].age++;
donnees.mer[j][k].satiete=tour(donnees.mer[j][k].satiete,donnees.mer[j][k].metabolisme);
if(survie(donnees.mer[j][k].satiete,donnees.mer[j][k].dernier_repas,donnees.mer[j][k].duree_survie,donnees.mer[j][k].age,donnees.mer[j][k].esperance_vie)==1)
{
deplacement(donnees.mer,j,k);
}
else kill_poisson(donnees.mer,j,k);
}
}
}
remise_zero(donnees.mer);
sleep(2);
}
return NULL;
}
void *thread_affichage(donnee_t donnees)
{
affichage(donnees.mer,donnees.pecheur,donnees.images);
return NULL;
} |
Le problème est que je tombe sur une série de Segmentation fault a cause de la fonction SDL_BlitSurface() ou bien lors de la manipulation de mon tableau donnees.mer... :cry:
Donc je suppose que je ne sais pas passer mes paramètres dans mes threads.
Pourriez-vous m'aider?
Merci d'avance