Des trucs marchent, d'autres pas

master
Philippe Pittoli 2011-03-21 00:18:49 +01:00
parent ed687937a7
commit 2397312de1
2 changed files with 15 additions and 8 deletions

View File

@ -72,15 +72,17 @@ int main( int argc, char **argv)
V(mutex_tpa); V(mutex_tpa);
// Création des fenêtres MARCHE
f_haut = creation_fenetre(LINES/NB_FENETRES,0,"F_HAUT") ; f_haut = creation_fenetre(LINES/NB_FENETRES,0,"F_HAUT") ;
f_milieu1 = creation_fenetre(LINES/NB_FENETRES,LINES - 3 * (LINES/NB_FENETRES),"F_MILIEU1") ; f_milieu1 = creation_fenetre(LINES/NB_FENETRES,LINES - 3 * (LINES/NB_FENETRES),"F_MILIEU1") ;
f_milieu2 = creation_fenetre(LINES/NB_FENETRES,LINES - 2 * (LINES/NB_FENETRES),"F_MILIEU2") ; f_milieu2 = creation_fenetre(LINES/NB_FENETRES,LINES - 2 * (LINES/NB_FENETRES),"F_MILIEU2") ;
f_bas = creation_fenetre(LINES/NB_FENETRES, LINES - (LINES/NB_FENETRES),"F_BAS") ; f_bas = creation_fenetre(LINES/NB_FENETRES, LINES - (LINES/NB_FENETRES),"F_BAS") ;
sleep(5); sleep(5);
// aDesProd => est-ce qu'il y a des producteur (sinon on quitte) // aDesProd => est-ce qu'il y a des producteur (si 0 on quitte)
// si = 0 alors on continue
int aDesProd; int aDesProd;
// numTete est un entier qui détermine la "tête" courante. Si elle a changé, c'est qu'on a ajouté un caractère
int numTete = 0; int numTete = 0;
while (1) while (1)
@ -90,14 +92,17 @@ int main( int argc, char **argv)
if(numTete != memoireP->tete) if(numTete != memoireP->tete)
{ {
numTete = memoireP->tete; numTete = memoireP->tete;
c = memoireP->f[numTete].c; c = (char) memoireP->f[numTete].c;
switch(memoireP->f[numTete].idp) switch(memoireP->f[numTete].idp)
{ {
case 0 : w = f_haut; case 0 :
w = f_haut;
break; break;
case 1 : w = f_milieu1; case 1 :
w = f_milieu1;
break; break;
case 2 : w = f_milieu2; case 2 :
w = f_milieu2;
break; break;
default : default :
w = f_bas; w = f_bas;
@ -106,7 +111,8 @@ int main( int argc, char **argv)
wrefresh(w) ; wrefresh(w) ;
} }
V(mutex_data); V(mutex_data);
// On vérifie qu'il y ait toujours des producteurs
// On vérifie qu'il y ait toujours des producteurs MARCHE
for(i = 0 ; i < MAX_PROD && aDesProd == 0 ; i++ ) for(i = 0 ; i < MAX_PROD && aDesProd == 0 ; i++ )
if(memoireP->tpa[i] != -1) if(memoireP->tpa[i] != -1)
aDesProd = 1; aDesProd = 1;
@ -124,7 +130,7 @@ int main( int argc, char **argv)
endwin() ; endwin() ;
exit(EXIT_SUCCESS); exit(EXIT_SUCCESS);
} }
sleep(1); // Ralentissement volontaire du programme usleep(10); // Ralentissement volontaire du programme
} }
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }

View File

@ -49,6 +49,7 @@ int main( int argc, char **argv)
memoireP->f[memoireP->tete].idp = i; memoireP->f[memoireP->tete].idp = i;
memoireP->tete = memoireP->tete +1; memoireP->tete = memoireP->tete +1;
} }
fprintf(stdout, "Voici le caractère écrit : %c\n", memoireP->f[memoireP->tete].c);
V(mutex_data); V(mutex_data);
} }
// On a fini, on remet la valeur de l'indice du processus à -1 dans le tableau des producteurs // On a fini, on remet la valeur de l'indice du processus à -1 dans le tableau des producteurs