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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 typedef struct thread { espece ** mer; SDL_Surface * images[20]; humain * pecheur; } donnee_t ;Et voila mes deux threads :
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
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); ... }
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...
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 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; }
Donc je suppose que je ne sais pas passer mes paramètres dans mes threads.
Pourriez-vous m'aider?
Merci d'avance
Partager