void Commande ( TypeVoie entree, TypeVoie sortie )
{
	//gérer le numero de la voiture
	//création de la voiture
	struct Voiture voitureManuelle ={entree, sortie, numVoiture};
	//création et envoit du message 
	struct MsgVoiture message={(long)(entree), voitureManuelle};
	msgsnd(balVoiture, &message,  sizeof (MsgVoiture), 0);

	

	//Modification de l'affichage
	Effacer(MESSAGE);
	OperationVoie(PLUS,entree);
	Afficher(MESSAGE,"Votre nouvelle voiture a été ajouté");
	Effacer(NUMERO);
	Afficher(NUMERO,numVoiture,GRAS);
	Effacer(ENTREE);
	Afficher(ENTREE,entree,GRAS);
	Effacer(SORTIE);
	Afficher(SORTIE,sortie,GRAS); 

	//incremente le numero de voiture
	if (numVoiture>numeroMaxManuel) numVoiture=1;
	else numVoiture++;

}
示例#2
0
static void EffacerPlace (unsigned int num) {
	switch(num) {
		case 1:
			Effacer(ETAT_P1);
            break;
		case 2:
			Effacer(ETAT_P2);
            break;
		case 3:
			Effacer(ETAT_P3);
            break;
		case 4:
			Effacer(ETAT_P4);
            break;
		case 5:
			Effacer(ETAT_P5);
            break;
		case 6:
			Effacer(ETAT_P6);
            break;
		case 7:
			Effacer(ETAT_P7);
            break;
		case 8:
			Effacer(ETAT_P8);
            break;
		default :
			Afficher(MESSAGE, "Erreur de num");

	}
}
示例#3
0
bool FenetreSaisie::qt_invoke( int _id, QUObject* _o )
{
	switch ( _id - staticMetaObject()->slotOffset() ) {
		case 0: Login(); break;
		case 1: Terminer(); break;
		case 2: Reservation(); break;
		case 3: SelectionnerOk0(); break;
		case 4: SelectionnerOk1(); break;
		case 5: SelectionnerOk2(); break;
		case 6: SelectionnerOk3(); break;
		case 7: SelectionnerOk4(); break;
		case 8: SelectionnerOk((int)static_QUType_int.get(_o+1)); break;
		case 9: Precedent(); break;
		case 10: Suivant(); break;
		case 11: Effacer(); break;
		case 12: Recherche(); break;
		case 13: Rendu0(); break;
		case 14: Rendu1(); break;
		case 15: Rendu2(); break;
		case 16: Rendu((int)static_QUType_int.get(_o+1)); break;
		case 17: languageChange(); break;
		default:
		return QDialog::qt_invoke( _id, _o );
	}
	return TRUE;
}
示例#4
0
static void SignalVoitureSortie ( int noSignal )
// Algorithme :
//
{
	int pid;
	int numeroPlace = -1;
	int statut;
	if ((pid = wait(&statut)) == -1)
	{ 	Afficher(TypeZone::MESSAGE, "Erreur wait pid" );
	}
	numeroPlace = WEXITSTATUS(statut);
	for(unsigned int i=0;i<NB_PLACES;i++) {
		if(pidVoituriers[i].numeroPlace == pid) 
		{	struct sembuf op;
			op.sem_num = 0;
			op.sem_op = -1;
			op.sem_flg = 0;
			while(semop(idSemaphoreContenuParking,&op,1) == -1 && errno == EINTR);
			Effacer((TypeZone)numeroPlace);
			AfficherSortie(parking->voitures[numeroPlace].usager, parking->voitures[numeroPlace].numeroPlaque, parking->voitures[numeroPlace].heureArrivee, time(NULL));
			parking->voitures[numeroPlace] = {0,0,TypeUsager::AUCUN,0};
			op.sem_op = 1;
			semop(idSemaphoreContenuParking, &op, 1);			
			pidVoituriers[i].numeroPlace = -1;
			GereRequete();
		}
	}
} //----- fin de SignalVoitureGaree
示例#5
0
void Commande ( char code, unsigned int valeur )
// Algorithme :
//    Exécute les instructions nécessaire pour la commande qui vient
//    d'être envoyée en envoyant des messages aux barrières pour 'P', 'A'
//    et 'S' et en terminant la tâche pour 'E'.
{
    Effacer(MESSAGE);
    int fileId;
    switch(code)
    {
    case 'e':
    case 'E':
        DetruireSimulateur();
        break;

    case 'p':
    case 'P':
        switch (valeur)
        {
            case 1:
                fileId = PROF_BLAISE_PASCAL - 1;
                break;
            case 2:
                fileId = ENTREE_GASTON_BERGER - 1;
                break;
            default:
                return;
        }
        EnvoyerMessage(filesId[fileId], MSG_ENTREE, PROF, 1 + nbVoiture++ % MAX_NUM_VOITURE, 0);
        break;

    case 'a':
    case 'A':
        switch (valeur)
        {
            case 1:
                fileId = AUTRE_BLAISE_PASCAL - 1;
                break;
            case 2:
                fileId = ENTREE_GASTON_BERGER - 1;
                break;
            default:
                return;
        }
        EnvoyerMessage(filesId[fileId], MSG_ENTREE, AUTRE, 1 + nbVoiture++ % MAX_NUM_VOITURE, 0);
        break;

    case 's':
    case 'S':
        EnvoyerMessage(filesId[SORTIE_GASTON_BERGER - 1], MSG_SORTIE, AUCUN, 0, valeur);
        break;

    default:
        break;
	}
} //----- fin de Commande
示例#6
0
static void GereRequete() 
// Algorithme :
//
{
	int bestChoice = -1;
	struct sembuf op;
	op.sem_num = 0;
	op.sem_op = -1;
	op.sem_flg = 0;
	while(semop(idSemaphoreRequete,&op,1) == -1 && errno == EINTR);
	Voiture v1 = requetes->requetes[0].voiture;
	Voiture v2 = requetes->requetes[1].voiture;
	Voiture v3 = requetes->requetes[2].voiture;
	if(v1.usager == PROF)
	{
		if(v3.usager == PROF && v3.heureArrivee < v1.heureArrivee)
		{	bestChoice = 2;
		}
		else
		{	bestChoice = 0;
		}
	}
	else if(v3.usager == PROF)
	{	bestChoice = 2;
	}
	else if(v2.usager == AUTRE)
	{	if(v3.usager == AUTRE && v3.heureArrivee < v2.heureArrivee)
		{	bestChoice = 2;
		}
		else
		{	bestChoice = 1;
		}
	}
	else if(v3.usager != AUCUN)
	{	bestChoice = 2;
	}
	if(bestChoice != -1) 
	{	Effacer((TypeZone)(TypeZone::REQUETE_R1 + bestChoice));
		struct sembuf op;
		op.sem_num = 0;
		op.sem_op = 1;
		op.sem_flg = 0;
		requetes->requetes[bestChoice].typeBarriere = TypeBarriere::AUCUNE;
		requetes->requetes[bestChoice].voiture = {0,0,TypeUsager::AUCUN,0};
		semop(idSemaphoreSynchro[bestChoice], &op, 1);
	}
	op.sem_op = 1;
	semop(idSemaphoreRequete, &op, 1);
	op.sem_op = -1;
	while(semop(idSemaphoreNbPlaces,&op,1) == -1 && errno == EINTR);
	*nbPlaces = *nbPlaces + 1;
	op.sem_op = 1;
	semop(idSemaphoreNbPlaces, &op, 1);
} //----- fin de GereRequete
void Commande ( TypeVoie voie, unsigned int duree )
{
	/** structures pour les opérations sur la durée (lecture) */
		struct sembuf getDLock;
		getDLock.sem_num = dureesLoc;
		getDLock.sem_op = -1;
		getDLock.sem_flg = 0;

		struct sembuf releaseDLock;
		releaseDLock.sem_num = dureesLoc;
		releaseDLock.sem_op = 1;
		releaseDLock.sem_flg = 0;

	if( ( voie == OUEST ) || ( voie == EST ))
	{
		//Ecriture sur la memoire paratagée, protégée par semaphore
		semop(dureesLoc,&getDLock,1);
		dureeFeux->dureeEO = duree;
		semop(dureesLoc,&releaseDLock,1);

		//Modification de l'affichage
		Effacer(MESSAGE);
		Afficher(MESSAGE,"La durée des feux de l'axe EO a changé");
	}

	if( ( voie == SUD ) || ( voie == NORD ))
	{
		//Ecriture sur la memoire partagée, protégée par semaphore
		semop(dureesLoc,&getDLock,1);
		dureeFeux->dureeNS = duree;
		semop(dureesLoc,&releaseDLock,1);

		//Modification de l'affichage
		Effacer(MESSAGE);
		Afficher(MESSAGE,"La durée des feux de l'axe NS a changé");
	}
	
}
bool RechercheCodesPostaux::qt_invoke( int _id, QUObject* _o )
{
    switch ( _id - staticMetaObject()->slotOffset() ) {
    case 0: RechercheCodePostal(); break;
    case 1: ListeSuivant(); break;
    case 2: ListePrecedent(); break;
    case 3: Terminer(); break;
    case 4: Effacer(); break;
    case 5: languageChange(); break;
    default:
	return QDialog::qt_invoke( _id, _o );
    }
    return TRUE;
}
void Commande ( char code )
{
	if(code == 'Q'){

		// Si le generateur est etteint à la fin, on a un waitpid infini
		if (!generateurActif)
			kill(pidGenerateur,SIGCONT);
		//Detachement de la mémoire partagée
		shmdt(dureeFeux);
		exit(0);
	}

	if (code=='G')
	{
		if (generateurActif)
		{
			kill(pidGenerateur,SIGSTOP);
			generateurActif=false;
			//Modification de  l'affichage 
			Effacer(MESSAGE);
			Effacer(ETAT_GENERATEUR);
			Afficher(ETAT_GENERATEUR,"OFF",GRAS);
			Afficher(MESSAGE,"Le generateur a été eteint");
		}
		else
		{
			kill(pidGenerateur,SIGCONT);
			generateurActif=true;
			//Modification de l'affichage 
			Effacer(MESSAGE);
			Effacer(ETAT_GENERATEUR);
			Afficher(ETAT_GENERATEUR,"ON",GRAS);
			Afficher(MESSAGE,"Le generateur a été activé");
		}
	}
}
bool PremierExemple::qt_invoke( int _id, QUObject* _o )
{
    switch ( _id - staticMetaObject()->slotOffset() ) {
    case 0: Addition(); break;
    case 1: Soustraction(); break;
    case 2: Multiplication(); break;
    case 3: DivisionEntiere(); break;
    case 4: Effacer(); break;
    case 5: Terminer(); break;
    case 6: languageChange(); break;
    default:
	return QDialog::qt_invoke( _id, _o );
    }
    return TRUE;
}
示例#11
0
static void Moteur(TypeBarriere parametre)
// Algorithme :
//  Phase moteur de la tâche Entree
//  S'occupe d'aller piocher un message dans la BaL associée à parametre, et à gérer cette voiture
//  (la faire entrer, ou attendre que ce soit son tour de rentrer si le parking est plein)
{
	struct sembuf reserver = {MUTEX_MEMPARTAGEE, -1,0};	//p Operation --> Reservation
	struct sembuf liberer = {MUTEX_MEMPARTAGEE, 1, 0};	//v Operation --> liberation

	msgClavier* voiture = (msgClavier*) malloc(sizeof(struct msgClavier));


	if(msgrcv(balId, voiture, TAILLE_MESSAGE, parametre, 0) != -1)
	{
		DessinerVoitureBarriere(parametre,voiture->typeVehicule);

		while(semop(semId,&reserver,1)==-1 && errno==EINTR); //Reservation de la memoire

		structMemoire *park = (structMemoire *) shmat(idMemPart, NULL, 0) ; //attachement
		if(park->nbPlacesLibres <= 0)
		{
			park->attente[parametre-1] = (*voiture);
			shmdt(park); //detachement
			semop(semId,&liberer,1); //Liberation de la memoire partagee
			AfficherRequete(parametre, voiture->typeVehicule, voiture->tArrivee);
			SetSemAttente(parametre,1);
			while(GetSemAttente(parametre) == 1){sleep(0.1);};
			Effacer((TypeZone)(parametre+ETAT_P8)); // l'indice de la zone commence à ETAT_P8 + 1, les parametres des portes font le complément d'indice

			while(semop(semId,&reserver,1)==-1 && errno==EINTR); //Reservation de la memoire

			park = (structMemoire *) shmat(idMemPart, NULL, 0) ; //atta   chement
		}

		park->nbPlacesLibres--;

		shmdt(park); //detachement
		semop(semId,&liberer,1); //Liberation de la memoire partagee

		pid_t garer=GarerVoiture(parametre);
		Voiturier temp;
		temp.mouvementGarer = garer;
		temp.voiture = voiture;
		mouvementPark.push_back(temp);
		sleep(ATTENTE);
	}
} //----- fin de Moteur
示例#12
0
/*
 *  Constructs a FenetreSaisie as a child of 'parent', with the
 *  name 'name' and widget flags set to 'f'.
 *
 *  The dialog will by default be modeless, unless you set 'modal' to
 *  TRUE to construct a modal dialog.
 */
FenetreSaisie::FenetreSaisie( QWidget* parent, const char* name, bool modal, WFlags fl )
    : QDialog( parent, name, modal, fl )
{
    if ( !name )
	setName( "FenetreSaisie" );

    textTitre = new QLabel( this, "textTitre" );
    textTitre->setGeometry( QRect( 210, 20, 160, 21 ) );
    QFont textTitre_font(  textTitre->font() );
    textTitre_font.setFamily( "Helvetica [Adobe]" );
    textTitre_font.setPointSize( 18 );
    textTitre_font.setBold( TRUE );
    textTitre->setFont( textTitre_font ); 
    textTitre->setAlignment( int( QLabel::AlignCenter ) );

    textNom = new QLabel( this, "textNom" );
    textNom->setGeometry( QRect( 30, 50, 59, 20 ) );

    lineSaisieNom = new QLineEdit( this, "lineSaisieNom" );
    lineSaisieNom->setGeometry( QRect( 100, 50, 220, 20 ) );

    ButtonLogin = new QPushButton( this, "ButtonLogin" );
    ButtonLogin->setGeometry( QRect( 440, 50, 85, 20 ) );
    ButtonLogin->setAutoDefault( FALSE );

    ButtonReservation = new QPushButton( this, "ButtonReservation" );
    ButtonReservation->setGeometry( QRect( 740, 420, 85, 20 ) );
    ButtonReservation->setAutoDefault( FALSE );

    ButtonTerminer = new QPushButton( this, "ButtonTerminer" );
    ButtonTerminer->setGeometry( QRect( 550, 50, 85, 20 ) );
    ButtonTerminer->setAutoDefault( FALSE );

    lineNom[0] = new QLineEdit( this, "lineNom" );
    lineNom[0]->setGeometry( QRect( 30, 110, 220, 20 ) );
    lineNom[0]->setReadOnly( TRUE );
    lineNom[1] = new QLineEdit( this, "lineNom" );
    lineNom[1]->setGeometry( QRect( 30, 135, 220, 20 ) );
    lineNom[1]->setReadOnly( TRUE );
    lineNom[2] = new QLineEdit( this, "lineNom" );
    lineNom[2]->setGeometry( QRect( 30, 160, 220, 20 ) );
    lineNom[2]->setReadOnly( TRUE );

    linePrenom[0] = new QLineEdit( this, "linePrenom" );
    linePrenom[0]->setGeometry( QRect( 260, 110, 160, 20 ) );
    linePrenom[0]->setReadOnly( TRUE );
    linePrenom[1] = new QLineEdit( this, "linePrenom" );
    linePrenom[1]->setGeometry( QRect( 260, 135, 160, 20 ) );
    linePrenom[1]->setReadOnly( TRUE );
    linePrenom[2] = new QLineEdit( this, "linePrenom" );
    linePrenom[2]->setGeometry( QRect( 260, 160, 160, 20 ) );
    linePrenom[2]->setReadOnly( TRUE );

    lineTitre[0] = new QLineEdit( this, "lineTitre" );
    lineTitre[0]->setGeometry( QRect( 430, 110, 290, 20 ) );
    lineTitre[0]->setReadOnly( TRUE );
    lineTitre[1] = new QLineEdit( this, "lineTitre" );
    lineTitre[1]->setGeometry( QRect( 430, 135, 290, 20 ) );
    lineTitre[1]->setReadOnly( TRUE );
    lineTitre[2] = new QLineEdit( this, "lineTitre" );
    lineTitre[2]->setGeometry( QRect( 430, 160, 290, 20 ) );
    lineTitre[2]->setReadOnly( TRUE );

    ButtonRendu[0] = new QPushButton( this, "ButtonRendu" );
    ButtonRendu[0]->setGeometry( QRect( 740, 110, 85, 20 ) );
    ButtonRendu[0]->setAutoDefault( FALSE );
    ButtonRendu[1] = new QPushButton( this, "ButtonRendu" );
    ButtonRendu[1]->setGeometry( QRect( 740, 135, 85, 20 ) );
    ButtonRendu[1]->setAutoDefault( FALSE );
    ButtonRendu[2] = new QPushButton( this, "ButtonRendu" );
    ButtonRendu[2]->setGeometry( QRect( 740, 160, 85, 20 ) );
    ButtonRendu[2]->setAutoDefault( FALSE );

    ButtonPrecedent = new QPushButton( this, "ButtonPrecedent" );
    ButtonPrecedent->setGeometry( QRect( 60, 365, 85, 20 ) );
    ButtonPrecedent->setAutoDefault( FALSE );

    ButtonEffacer = new QPushButton( this, "ButtonEffacer" );
    ButtonEffacer->setGeometry( QRect( 330, 365, 85, 20 ) );
    ButtonEffacer->setAutoDefault( FALSE );

    ButtonSuivant = new QPushButton( this, "ButtonSuivant" );
    ButtonSuivant->setGeometry( QRect( 600, 365, 85, 20 ) );
    ButtonSuivant->setAutoDefault( FALSE );

    lineRecherche = new QLineEdit( this, "lineRecherche" );
    lineRecherche->setGeometry( QRect( 430, 190, 290, 20 ) );

    lineNomOk[0] = new QLineEdit( this, "lineNomOk" );
    lineNomOk[0]->setGeometry( QRect( 30, 230, 220, 20 ) );
    lineNomOk[0]->setReadOnly( TRUE );
    lineNomOk[1] = new QLineEdit( this, "lineNomOk" );
    lineNomOk[1]->setGeometry( QRect( 30, 255, 220, 20 ) );
    lineNomOk[1]->setReadOnly( TRUE );
    lineNomOk[2] = new QLineEdit( this, "lineNomOk" );
    lineNomOk[2]->setGeometry( QRect( 30, 280, 220, 20 ) );
    lineNomOk[2]->setReadOnly( TRUE );
    lineNomOk[3] = new QLineEdit( this, "lineNomOk" );
    lineNomOk[3]->setGeometry( QRect( 30, 305, 220, 20 ) );
    lineNomOk[3]->setReadOnly( TRUE );
    lineNomOk[4] = new QLineEdit( this, "lineNomOk" );
    lineNomOk[4]->setGeometry( QRect( 30, 330, 220, 20 ) );
    lineNomOk[4]->setReadOnly( TRUE );

    linePrenomOk[0] = new QLineEdit( this, "linePrenomOk" );
    linePrenomOk[0]->setGeometry( QRect( 260, 230, 160, 20 ) );
    linePrenomOk[0]->setReadOnly( TRUE );
    linePrenomOk[1] = new QLineEdit( this, "linePrenomOk" );
    linePrenomOk[1]->setGeometry( QRect( 260, 255, 160, 20 ) );
    linePrenomOk[1]->setReadOnly( TRUE );
    linePrenomOk[2] = new QLineEdit( this, "linePrenomOk" );
    linePrenomOk[2]->setGeometry( QRect( 260, 280, 160, 20 ) );
    linePrenomOk[2]->setReadOnly( TRUE );
    linePrenomOk[3] = new QLineEdit( this, "linePrenomOk" );
    linePrenomOk[3]->setGeometry( QRect( 260, 305, 160, 20 ) );
    linePrenomOk[3]->setReadOnly( TRUE );
    linePrenomOk[4] = new QLineEdit( this, "linePrenomOk" );
    linePrenomOk[4]->setGeometry( QRect( 260, 330, 160, 20 ) );
    linePrenomOk[4]->setReadOnly( TRUE );

    lineTitreOk[0] = new QLineEdit( this, "lineTitreOk" );
    lineTitreOk[0]->setGeometry( QRect( 430, 230, 270, 20 ) );
    lineTitreOk[0]->setReadOnly( TRUE );
    lineTitreOk[1] = new QLineEdit( this, "lineTitreOk" );
    lineTitreOk[1]->setGeometry( QRect( 430, 255, 270, 20 ) );
    lineTitreOk[1]->setReadOnly( TRUE );
    lineTitreOk[2] = new QLineEdit( this, "lineTitreOk" );
    lineTitreOk[2]->setGeometry( QRect( 430, 280, 270, 20 ) );
    lineTitreOk[2]->setReadOnly( TRUE );
    lineTitreOk[3] = new QLineEdit( this, "lineTitreOk" );
    lineTitreOk[3]->setGeometry( QRect( 430, 305, 270, 20 ) );
    lineTitreOk[3]->setReadOnly( TRUE );
    lineTitreOk[4] = new QLineEdit( this, "lineTitreOk" );
    lineTitreOk[4]->setGeometry( QRect( 430, 330, 270, 20 ) );
    lineTitreOk[4]->setReadOnly( TRUE );

    lineReserveOk[0] = new QLineEdit( this, "lineReserveOk" );
    lineReserveOk[0]->setGeometry( QRect( 700, 230, 20, 20 ) );
    lineReserveOk[0]->setReadOnly( TRUE );
    lineReserveOk[1] = new QLineEdit( this, "lineReserveOk" );
    lineReserveOk[1]->setGeometry( QRect( 700, 255, 20, 20 ) );
    lineReserveOk[1]->setReadOnly( TRUE );
    lineReserveOk[2] = new QLineEdit( this, "lineReserveOk" );
    lineReserveOk[2]->setGeometry( QRect( 700, 280, 20, 20 ) );
    lineReserveOk[2]->setReadOnly( TRUE );
    lineReserveOk[3] = new QLineEdit( this, "lineReserveOk" );
    lineReserveOk[3]->setGeometry( QRect( 700, 305, 20, 20 ) );
    lineReserveOk[3]->setReadOnly( TRUE );
    lineReserveOk[4] = new QLineEdit( this, "lineReserveOk" );
    lineReserveOk[4]->setGeometry( QRect( 700, 330, 20, 20 ) );
    lineReserveOk[4]->setReadOnly( TRUE );

    ButtonSelectionnerOk[0] = new QPushButton( this, "ButtonSelectionnerOk" );
    ButtonSelectionnerOk[0]->setGeometry( QRect( 740, 230, 85, 20 ) );
    ButtonSelectionnerOk[0]->setAutoDefault( FALSE );
    ButtonSelectionnerOk[1] = new QPushButton( this, "ButtonSelectionnerOk" );
    ButtonSelectionnerOk[1]->setGeometry( QRect( 740, 255, 85, 20 ) );
    ButtonSelectionnerOk[1]->setAutoDefault( FALSE );
    ButtonSelectionnerOk[2] = new QPushButton( this, "ButtonSelectionnerOk" );
    ButtonSelectionnerOk[2]->setGeometry( QRect( 740, 280, 85, 20 ) );
    ButtonSelectionnerOk[2]->setAutoDefault( FALSE );
    ButtonSelectionnerOk[3] = new QPushButton( this, "ButtonSelectionnerOk" );
    ButtonSelectionnerOk[3]->setGeometry( QRect( 740, 305, 85, 20 ) );
    ButtonSelectionnerOk[3]->setAutoDefault( FALSE );
    ButtonSelectionnerOk[4] = new QPushButton( this, "ButtonSelectionnerOk" );
    ButtonSelectionnerOk[4]->setGeometry( QRect( 740, 330, 85, 20 ) );
    ButtonSelectionnerOk[4]->setAutoDefault( FALSE );

    textSaisie = new QLabel( this, "textSaisie" );
    textSaisie->setGeometry( QRect( 30, 190, 330, 20 ) );

    textMessage = new QTextEdit( this, "textMessage" );
    textMessage->setGeometry( QRect( 30, 420, 685, 58 ) );
    textMessage->setReadOnly( TRUE );

    textInformation = new QLabel( this, "textInformation" );
    textInformation->setGeometry( QRect( 30, 390, 80, 20 ) );
    QFont textInformation_font(  textInformation->font() );
    textInformation_font.setFamily( "Helvetica [Adobe]" );
    textInformation_font.setBold( TRUE );
    textInformation->setFont( textInformation_font ); 

    textSelection = new QLabel( this, "textSelection" );
    textSelection->setGeometry( QRect( 30, 80, 180, 20 ) );
    languageChange();
    resize( QSize(850, 500).expandedTo(minimumSizeHint()) );
    clearWState( WState_Polished );

    // signals and slots connections
    connect( ButtonLogin, SIGNAL( clicked() ), this, SLOT( Login() ) );
    connect( ButtonReservation, SIGNAL( clicked() ), this, SLOT( Reservation() ) );
    connect( lineSaisieNom, SIGNAL( returnPressed() ), this, SLOT( Login() ) );
    connect( ButtonEffacer, SIGNAL( clicked() ), this, SLOT( Effacer() ) );
    connect( ButtonTerminer, SIGNAL( clicked() ), this, SLOT( Terminer() ) );
    connect( ButtonPrecedent, SIGNAL( clicked() ), this, SLOT( Precedent() ) );
    connect( ButtonSuivant, SIGNAL( clicked() ), this, SLOT( Suivant() ) );
    connect( lineRecherche, SIGNAL( returnPressed() ), this, SLOT( Recherche() ) );
    connect( ButtonRendu[0], SIGNAL( clicked() ), this, SLOT( Rendu0() ) );
    connect( ButtonRendu[1], SIGNAL( clicked() ), this, SLOT( Rendu1() ) );
    connect( ButtonRendu[2], SIGNAL( clicked() ), this, SLOT( Rendu2() ) );
    connect( ButtonSelectionnerOk[0], SIGNAL( clicked() ), this, SLOT( SelectionnerOk0() ) );
    connect( ButtonSelectionnerOk[1], SIGNAL( clicked() ), this, SLOT( SelectionnerOk1() ) );
    connect( ButtonSelectionnerOk[2], SIGNAL( clicked() ), this, SLOT( SelectionnerOk2() ) );
    connect( ButtonSelectionnerOk[3], SIGNAL( clicked() ), this, SLOT( SelectionnerOk3() ) );
    connect( ButtonSelectionnerOk[4], SIGNAL( clicked() ), this, SLOT( SelectionnerOk4() ) );
}
示例#13
0
void HandleSignalSortie(int sig)
//handler du signal SIGUSR2
{
//Actualisation du nombre de places	
	semop(id_sem, &reserver, 1); //Reservation de la ressource critique
	memoire->placesDispos++;
	semop(id_sem, &liberer, 1); //Liberation de la ressource critique
		
	//Recuperation de la voiture sortie
	int numPlace;
	pid_t pidVoiturier = waitpid((pid_t)(-1),&numPlace, WNOHANG);
	numPlace=WEXITSTATUS(numPlace);
	itMap=voituriers.find(pidVoiturier);
	Voiture voiture = itMap->second;

	//Actualisation de la memoire partagee
	semop(id_sem, &reserver, 1); //Reservation de la ressource critique
	memoire->parking[numPlace-1].usager = AUCUN;
	semop(id_sem, &liberer, 1); //Liberation de la ressource critique

	voituriers.erase(itMap);
	//analyse des requetes
	int prioritaire = definirPrioritaire();
	if(prioritaire != 0){
		semop(id_sem, &reserver, 1); //Reservation de la ressource critique
		memoire->demandes[prioritaire-1].usager = AUCUN;
		semop(id_sem, &liberer, 1); //Liberation de la ressource critique
		struct sembuf libererEntree = {prioritaire, 1, 0};
		int s = semop(id_sem, &libererEntree, 1); //deblocage de l'entree autorise
	}

	//actualisation de l'affichage
	switch(numPlace){
		case 1:
			Effacer(ETAT_P1);
			break;
		case 2:
			Effacer(ETAT_P2);
			break;
		case 3:
			Effacer(ETAT_P3);
			break;
		case 4:
			Effacer(ETAT_P4);
			break;
		case 5:
			Effacer(ETAT_P5);
			break;
		case 6:
			Effacer(ETAT_P6);
			break;
		case 7:
			Effacer(ETAT_P7);
			break;
		case 8:
			Effacer(ETAT_P8);
			break;
	}

	switch(prioritaire){
		case 1:
			Effacer(REQUETE_R1);
			break;
		case 2:
			Effacer(REQUETE_R2);
			break;
		case 3:
			Effacer(REQUETE_R3);
			break;
	}
	
	AfficherSortie(voiture.usager, voiture.matricule, voiture.heureArrivee, time(NULL));
	//heure de sortie calculée au dernier moment afin de gagner plus d'argent
}
示例#14
0
void Entree(TypeBarriere typeBarriere)
{
	//definition des id d'acces au boites aux lettres et semaphores
	long msgBufEntreeId;
	long msgbufRequeteId;
	unsigned short semElementSyncEntree;
    TypeZone zoneEcranRequete;
	switch (typeBarriere)
	{
		case PROF_BLAISE_PASCAL :
			//deja initialises aux bonnes valeurs;
			msgBufEntreeId = MSGBUF_ID_ENTREE_P;
			msgbufRequeteId = MSGBUF_ID_REQUETE_P;
	 		semElementSyncEntree = SEMELM_SINC_ENTREE_P;
            zoneEcranRequete = REQUETE_R1;
			break;
			
		case AUTRE_BLAISE_PASCAL :
		
			msgBufEntreeId = MSGBUF_ID_ENTREE_A;
			msgbufRequeteId = MSGBUF_ID_REQUETE_A;
			semElementSyncEntree = SEMELM_SINC_ENTREE_A;
            zoneEcranRequete = REQUETE_R2;
			break;

		case ENTREE_GASTON_BERGER :
		
			msgBufEntreeId = MSGBUF_ID_ENTREE_GB;
			msgbufRequeteId = MSGBUF_ID_REQUETE_GB;
			semElementSyncEntree = SEMELM_SINC_ENTREE_GB;
            zoneEcranRequete = REQUETE_R3;
			break;

		default :

			std::cerr << "not an entry process error" << std::endl;
            return;
			break;
	}
    //initialisation
    init();

    //phase moteur
    pid_t pidCurr;
    Voiture voiture;
    for(;;)
    {
        //appel bloquant, attente d'une demande d'entree
        if(msgrcv(msgbuffId, &voiture, sizeof(Voiture)-sizeof(long), msgBufEntreeId, 0) == -1)
            continue; // sarestart (sur les erreurs aussi)
		DessinerVoitureBarriere(typeBarriere, voiture.typeUsager);
		
		if(semVal(SEMELM_PLACEDISPO) > 0)
		{
			if((pidCurr = GarerVoiture(typeBarriere)) != -1)
			{
				semP(SEMELM_PLACEDISPO);
				mapVoiturier.insert(std::pair<pid_t, Voiture>(pidCurr, voiture));
			}
		}
		else
		{
            //affiche requete
            AfficherRequete(typeBarriere,voiture.typeUsager,voiture.heureArrivee);
            Requete re;
            re.type = msgbufRequeteId;
            re.heureArrivee = voiture.heureArrivee;
            re.typeUsager = voiture.typeUsager;
            if(msgsnd(msgbuffId, &re, sizeof(Requete)-sizeof(long), 0 )==-1);
			semP(semElementSyncEntree);
			if((pidCurr = GarerVoiture(typeBarriere)) != -1)
			{
                //met à jour l'heure d'entree dans le parking
                voiture.heureArrivee = time(NULL);
				mapVoiturier.insert(std::pair<pid_t, Voiture>(pidCurr, voiture));
			}
            Effacer(zoneEcranRequete);
		}
    }
}