//fichier grafcet.cpp , Patrick TRAU - IPST ULP #include <iostream.h> #include <stdlib.h> #include <pthread.h> #define nbcapteurs 6 enum capteurs {A,B,C,D,E,F}; pthread_t th1a3, th4a5, th6a7,thes; void *ret; int X3=0; int capteur[nbcapteurs]={0}; void * etape1a3(void *); void * etape4a5(void *); void * etape6a7(void *); void * etape1a3(void * arg) { cout<<"entree etape 1\n"; do ; while(!capteur[A]); cout<<"sortie etape 1\n"; cout<<"entree etape 2\n"; do ; while(!capteur[B]); cout<<"sortie etape 2\n"; cout<<"entree etape 3\n"; do ; while(!capteur[D]); //de toute façccedil;on il faut D //je previens 4a5 qu'il peut se terminer. Dans un premier temps via une variable globale X3=1; pthread_join (th4a5, &ret); cout<<"sortie etape 3\n"; X3=0; pthread_create (&th6a7, NULL, etape6a7, (void*)"6a7"); pthread_exit (0); } void * etape4a5(void * arg) { cout<<"entree etape 4\n"; do ; while(!capteur[C]); cout<<"sortie etape 4\n"; cout<<"entree etape 5\n"; do ; while(!X3); cout<<"sortie etape 5\n"; pthread_exit (0); } void * etape6a7(void * arg) { cout<<"entree etape 6\n"; do ; while(!capteur[E]); cout<<"sortie etape 6\n"; cout<<"entree etape 7\n"; do ; while(!capteur[F]); cout<<"sortie etape 7\n"; pthread_create (&th1a3, NULL, etape1a3, (void*)"1a3"); pthread_create (&th4a5, NULL, etape4a5, (void*)"4a5"); pthread_exit (0); } void * es(void * arg) { char c; int i; do { cin>>c; if(c>='a'&&c<'a'+nbcapteurs) capteur[c-'a']=0; else if(c>='A'&&c<'A'+nbcapteurs) capteur[c-'A']=1; else if(c=='?') { for(i=0;i<nbcapteurs;i++) cout<<(char)('A'+i)<<'='<<capteur[i]<<" "; cout<<"\n"; } else if (c!='Q') { cout<<"A a "<<(char)('A'+nbcapteurs-1)<<" (majuscule) : allumer un capteur\n"; cout<<"a a "<<(char)('a'+nbcapteurs-1)<<" (minuscule) : eteindre un capteur\n"; cout<<"? : etat des capteurs\n"; cout<<"Q : quitter le programme\n"; } } while(c!='Q'); } main (void) { pthread_create (&th1a3, NULL, etape1a3, (void*)"1a3"); pthread_create (&th4a5, NULL, etape4a5, (void*)"4a5"); pthread_create (&thes, NULL, es, (void*)"e-s"); pthread_join (thes, &ret); }
P. TRAU, ULP IPST, nov 05